lurenaa的博客

1
2
unsigned int a  = -1;
printf("%d,%u,%x",a,a,a);

-1,4294967295,ffffffff

从结果上来说,验证了C++中使用的是补码

🍠现在说一说为什么异或能够确定两个数的符号是否相同?

  这里还有一个前提,两个数都是int类型,因为补码的原因,如果两个数的正负不同,那么它们的第一位就不同,因为int的第一位是正负的标志位。
通过异或,那么正数的第一位为0,负数的第一位为1,异或后第一位就为1,所以可以得到计算出的值为负值。相反如果两者符号相同,那么通过异或后,第一位就为0,所以为正数。