&:按二进制与。
| :按二进制或。
^ : 按二进制异或。
注意:操作数只能是整形
一.按位与
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。
二.按位或
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。
三.按位异或
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。


