&:按二进制与。
| :按二进制或。
^ : 按二进制异或。
注意:操作数只能是整形
1.按位与
int main() { int a = 3; int b = -5; int ret = a & b; printf("ret = %d\n", ret); return 0; }按位与怎么计算的呢?
(1).按位与的原则:有 0 则 0,全 1 为 1。
(2).写出数字的二进制补码:
如果是正数,正数的原码,反码,补码都相同。
如果是负数,先写出负数的原码,符号位不变,取反得到反码,+1得到补码。
(3).把这2个数字的补码相加。
最终得到的结果:
最终得到的是补码,正数的原码,反码,补码相同,所以结果就是3。
2.按位或
int main() { int a = 3; int b = -5; int ret = a | b; printf("ret = %d\n", ret); return 0; }按位与怎么计算的呢?
(1).按位与的原则:有 1 则 1,全 0 为 0。
(2).剩下的和按位与是一样的
得到的结果,看最高位是1,说明是个负数,这是补码,还要取反+1得到原码,(或者-1取反也是可以得到原码的)因为这就是-5的补码,结果也就是-5。
3.按位异或
int main() { int a = 3; int b = -5; int ret = a ^ b; printf("ret = %d\n", ret); return 0; }按位异与怎么计算的呢?
(1).按位与的原则:相 同 为 0,相 异 为 1。
(2).剩下的步骤不变。
这次得到的补码,需要 取 反 + 1(-1 取 反 )得到原码。
补码: 1111 1111 1111 1111 1111 1111 1111 1000
反码:1000 0000 0000 0000 0000 0000 0000 0111
原码:1000 0000 0000 0000 0000 0000 0000 1000
而这个原码的数字就是 -8
最后,也希望对你有所帮助,byebye。