/*
1.基础知识:
6和7 异或操作后值为1
分析:
二进制为:
6 -> 110
7 -> 111
结果: 001
异或的原理就是 相同的位 值都为1 那么异或的结果就为0 不同的时候就是 或操作
记住下面两句,交换两个数的时候会用到
N ^ 0 = N
N ^ N = 0
那么总结一句话就是: 无进位相加
举例: 8 ^ 3 14 ^ 5
1000 1110
0011 0101
结果:1011 1011
扩展: a^b^c^d^e 无论顺序是什么样 结果都不会变 满足 结合律与交换律
假设 abcde 只有5位
a b c d e 那么结果是什么 结论 如果五个数单一位上的 1 和 是2的倍数(0除外) 那 这个位的结果就是0 如果不是 则结果是1 如果和是0 结果是0
4 1 0 1 0 1 1
3 0 1 0 0 0 1
2 1 1 1 1 1 1
1 0 1 1 0 0 0
0 0 1 0 1 1 1
那么如果交换两个数怎么用位操作去做
int a = 甲, b = 乙
只需要三行代码 就可以交换 流程与分析如下
a = a ^ b; 此时 a = 甲 ^ 乙;
b = a ^ b; b = a ^ b = 甲 ^ 乙 ^ 乙 = 甲;
a = a ^ b; a = a ^ b = 甲 ^ 乙 ^ 甲 = 乙;
所以结果是 a = 乙,b = 甲;
注意:不要交换同一片内存地址的值 比如交换数组下标相同的值 arr 交换 i j位置的值 要保证 i != j 否则结果是0
*/
异或原理分析
最新推荐文章于 2022-09-13 15:35:17 发布