技术的乐趣在于分享,欢迎多多交流,多多沟通。
全部博文(877)
分类: LINUX
2014-04-21 13:37:14
这里就是用到了的特性罢了。 就是一个数与另外一个数的结果再与这个数就会得到其原值。 如:a == a ^ b ^ b; 上面这个用得很巧,巧就巧在他们无形中使用了中间变量。 因为第二行的时候的i已经是他们第一次异或的结果了,所以再异或一个就得到了i本身的值,所以j的值就是原来i的值了。
假设两个数x和y,则有:
方法1,算术运算(加减):
x=x+y; //x暂存两数之和
y=x-y; //y为两数之和减去y,即原来的x
x=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y
|
方法2,逻辑运算(异或):
x^=y; //x先存x和y两者的信息
y^=x; //保持x不变,利用x异或反转y的原始值使其等于x的原始值
x^=y; //保持y不变,利用x异或反转y的原始值使其等于y的原始值
|
关于异或运算要牢记两个原则:
任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)