Python中為什么可以通過bin(n & 0xffffffff)來獲得負數的補碼?


一開始我以為這不是個大問題,因為本來整型數在內存中就是以補碼的形式存在的,輸出自然也是按照補碼輸出的,例如C語言中

printf("%X\n",-3);
//輸出
//FFFFFFFD

但是我看了下Python的bin()的輸出之后震驚了

a = bin(-3)
print(a)

a = bin(3)
print(a)

b = bin(-3 & 0xffffffff)
print(b)

c = bin(0xfffffffd)
print(c)

//輸出
//-0b11
//0b11
//0b11111111111111111111111111111101
//0b11111111111111111111111111111101

也就是說

  1. Python中的整型是補碼形式存儲的
  2. Python中bin一個負數(十進制表示),輸出的是它的原碼的二進制表示加上個負號,方便查看(方便個鬼啊)
  3. Python中bin一個負數(十六進制表示),輸出的是對應的二進制表示。(注意此時)

所以你為了獲得負數(十進制表示)的補碼,需要手動將其和十六進制數0xfffffffd進行按位與操作,得到結果也是個十六進制數,再交給bin()進行輸出,得到的才是你想要的補碼表示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM