Python中的負(fù)數(shù)是以補(bǔ)碼的形式存在的。補(bǔ)碼是一種表示負(fù)數(shù)的二進(jìn)制編碼形式,它是將正數(shù)的二進(jìn)制碼取反加1的結(jié)果。
# 示例代碼 a = -5 print(bin(a))
在上面的代碼中,變量a被賦值為-5,然后使用bin()函數(shù)將其轉(zhuǎn)換為二進(jìn)制數(shù)并輸出。結(jié)果為:
-0b101
可以看到,輸出的二進(jìn)制數(shù)是負(fù)數(shù)的補(bǔ)碼形式,它的計(jì)算過(guò)程如下:
正數(shù)5的二進(jìn)制碼:00000101 取反: 11111010 加1: 11111011
因此,-5的補(bǔ)碼為11111011。
需要注意的是,Python的補(bǔ)碼表示方式是與具體的數(shù)據(jù)類型有關(guān)的。例如,對(duì)于8位的有符號(hào)整型(int8),最高位表示符號(hào)位,1為負(fù)數(shù),0為正數(shù),所以有符號(hào)整型-5在int8下的補(bǔ)碼為11111011。而對(duì)于16位的有符號(hào)整型(int16),其補(bǔ)碼表示方式與int8不同,需要考慮到更多位數(shù)。
# 示例代碼 a = -5 b = a.to_bytes(2, byteorder='big', signed=True) print(b)
在上面的代碼中,使用了to_bytes()函數(shù)將-5轉(zhuǎn)換成2字節(jié)的有符號(hào)整型(int16)后輸出。結(jié)果為:
b'\xff\xfb'
可以發(fā)現(xiàn),-5在int16下的補(bǔ)碼為1111111111111011,即FFFB(其中FF為高位表示符號(hào)位)。這也再次說(shuō)明,Python的補(bǔ)碼表示方式是與具體的數(shù)據(jù)類型有關(guān)的。