欢迎光临
我们一直在努力

C语言操作符 — & (按位与) | (按位或) ^ (按位异或)

&:按二进制与。

| :按二进制或。

^ : 按二进制异或。

注意:操作数只能是整形

 一.按位与

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。

赞(0)
未经允许不得转载:171主机测评 » C语言操作符 — & (按位与) | (按位或) ^ (按位异或)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址