A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李景荣 于 2013-2-22 22:29 编辑

普通用的交换
int a,b;
a=b-a;
b=b-a;
a=a+b;
意欲换值:
a=a^b;
b=a^b;
a=a^b;
它是什么意思呢?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 罗海云 于 2013-2-22 18:41 编辑

^ 是按位异或操作符。两数相同的话异或的结果就是 0,否则是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:

a = 0011   (3 的二进制表示)
b =   0100(4 的二进制表示)

有两个定理:
任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)
下面我给你举得一个列子:
                int a = 3,b = 4;
                                                    a            a           b
                a = a ^ b;//这儿就是 0111 = 0011 ^ 0100
                                              b             a      b
                b = a ^ b;//然后 0011 = 0111 ^ 0100
                                                   a           a          b
                a = a ^ b;//然后就是0100 = 0111 ^ 0011
                System.out.println("a: "+a+"b: "+b);
总之玩异或不懂就想把数值转换成2进制慢慢跟着程序走..就懂了

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
按位异或:是把两个操作数的各个二进制位进行“异或”操纵,即对应位置相同为0,不同为1,然后将其得到的二进制数转换为十进制数,这就是按位异或的表达式的值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马