邏輯位運算


負數在內存中是用補碼表示,顧名思義就是和其對應的正數相補

比如-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