Linux | c&cpp | Email | github | QQ群:425043908 关注本站

itarticle.cc

您现在的位置是:网站首页 -> 代码相关 文章内容

按位异或来交换两个数的原理-itarticl.cc-IT技术类文章记录&分享

发布时间: 9年前代码相关 121人已围观返回

1.异或

首先要明白3点:

1.任何数 ^ 任何数 = 0

2.任何数 ^ 0 = 任何数

3.异或满足交换率和结合律。就是 (a^b)^c = a^(b^c) = (a^c)^b


int a=A,b=B; //这里将a,b的原始值表示为 a=A,b=B

a=a^b; //将a,b的值A,B带入式子, a = a^b = A^B

b=a^b; //将a,b的值带入式子 b = a^b = (A^B) ^B = A^(B^B) = A^0 = A;

a=a^b; //将a,b的值带入式子 a = a^b = (A^B) ^A = (A^A)^B = 0^B = B;

//所以不管a,b为何值,经过上面3步,都能实现ab的交换


2.加减

int x=7,y=8;

x=x+y;

y=x-y;

x=x-y;


异或和加减这两个原理是一样的


附:C++其它位操作符

& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1

^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1

~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0

<< 左移 用来将一个数的各二进制位全部左移N位,右补0

>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

发布时间: 9年前代码相关121人已围观返回回到顶端

很赞哦! (1)

文章评论

  • 请先说点什么
    热门评论
    120人参与,0条评论

站点信息

  • 建站时间:2016-04-01
  • 文章统计:728条
  • 文章评论:82条
  • QQ群二维码:扫描二维码,互相交流