逻辑位运算


负数在内存中是用补码表示,顾名思义就是和其对应的正数相补

比如-2:

1111111……1110

和2相加正好溢出,也就是互补

比如~5取反:

5是0000000……00101

取反:1111111111……11010

这个数值和6正好互补,所以~5的值是-6

 

再比如,判断一个int值a是2的次方,除了判断a & (a-1) == 0 ,

可以通过这样:a & -a == a

先看充分性,2的n次方的形式都是

000……00010……0

这样,补码都是

111……11110……0这样

相与是和原值相等,

再看必要性,如果不是000……001000……00这种只有一位上有1的,而是多于一个位数上是1,比如随便找个位数

000^00100100,那么它的补码就是

111^11011100,相与就是最低位上的2的n次方,和原值是不想等的

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM