一開始我以為這不是個大問題,因為本來整型數在內存中就是以補碼的形式存在的,輸出自然也是按照補碼輸出的,例如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
也就是說
- Python中的整型是補碼形式存儲的
- Python中bin一個負數(十進制表示),輸出的是它的原碼的二進制表示加上個負號,方便查看(方便個鬼啊)
- Python中bin一個負數(十六進制表示),輸出的是對應的二進制表示。(注意此時)
所以你為了獲得負數(十進制表示)的補碼,需要手動將其和十六進制數0xfffffffd進行按位與操作,得到結果也是個十六進制數,再交給bin()進行輸出,得到的才是你想要的補碼表示。