剛剛介紹了位運(yùn)算符,里面涉及到了二進(jìn)制的運(yùn)算,出現(xiàn)了a = 60,~a = 1100 0011 = -61的計(jì)算,所以這里記錄一下二進(jìn)制的負(fù)數(shù)表示和計(jì)算。
二進(jìn)制是計(jì)算技術(shù)中廣泛采用的一種數(shù)制。二進(jìn)制數(shù)據(jù)是用0和1兩個(gè)數(shù)碼來表示的數(shù)。
它的基數(shù)為2,進(jìn)位規(guī)則是“逢二進(jìn)一”,借位規(guī)則是“借一當(dāng)二”,由18世紀(jì)德國數(shù)理哲學(xué)大師萊布尼茲發(fā)現(xiàn)。當(dāng)前的計(jì)算機(jī)系統(tǒng)使用的基本上是二進(jìn)制系統(tǒng),數(shù)據(jù)在計(jì)算機(jī)中主要是以補(bǔ)碼的形式存儲的。計(jì)算機(jī)中的二進(jìn)制則是一個(gè)非常微小的開關(guān),用“開”來表示1,“關(guān)”來表示0。
在二進(jìn)制碼中,采用最高位是符號位的方法來區(qū)分正負(fù)數(shù),正數(shù)的符號位為0、負(fù)數(shù)的符號位為1。二進(jìn)制的負(fù)數(shù)表示,只要將原碼正數(shù)的每位取反碼,再在所得數(shù)的末位加1,則正好得到負(fù)數(shù)的補(bǔ)碼,最后求得的補(bǔ)碼即負(fù)數(shù)的二進(jìn)制表示結(jié)果,這簡稱“取反加1”。
比如整數(shù) -1,以8位二進(jìn)制表示有符號數(shù),正數(shù):0000 0001,取反:1111 1110,補(bǔ)碼:1111 1111,即 -1 = 1111 1111,有沒有發(fā)現(xiàn)什么?
是的,會發(fā)現(xiàn):正數(shù)+補(bǔ)碼 = 0,即 1 + (-1) = 0,驗(yàn)證沒問題。
下面通過另一種8位二進(jìn)制的方式來解釋。
十進(jìn)制數(shù)字,在計(jì)算機(jī)中,是以二進(jìn)制存儲:
十進(jìn)制 +0,二進(jìn)制 0000 0000;
十進(jìn)制?+1,加?1,二進(jìn)制?0000 0001;
十進(jìn)制?+2,加 1,二進(jìn)制?0000 0010;
......
十進(jìn)制?+127,加 1......就加到了?0111 1111;
負(fù)數(shù)怎么辦? 你就從 0,依次遞減吧。
十進(jìn)制?0,以二進(jìn)制 0000 0000?存放。
十進(jìn)制 -1,減?1,得?1111 1111 = 255(十進(jìn)制)。
十進(jìn)制?-2,減 1,得?1111 1110 = 254。
十進(jìn)制?-3,減 1,得?1111 1101 = 253。
......
十進(jìn)制?-128,減 1......得?1000 0000 = 128。
不要再減了,這就是最小值了。
(再繼續(xù)減,就是 0111 1111,這就是+127 了。)
因此,最小的負(fù)數(shù)是-128,存放的是 10000000。
總結(jié):
零和正數(shù):直接用二進(jìn)制存放。
負(fù)數(shù):存放形式是:256(8位情況下)+這個(gè)負(fù)數(shù);
這套存放格式,就是所謂的補(bǔ)碼,即負(fù)數(shù)。
補(bǔ)碼有什么用?
利用補(bǔ)碼,可以把減法運(yùn)算,轉(zhuǎn)換成加法。
例如:6-2 = 4,用補(bǔ)碼運(yùn)算如下:
6 的表示是 0000 0110
?。。? 的補(bǔ)碼是 1111 1110
-----------------
(1) 0000 0100 (= 4 的補(bǔ)碼)
?。ɡㄌ栔械?1,是進(jìn)位,舍棄不要了。)
注意:
如果運(yùn)算結(jié)果超出了 -128~~+127 的范圍,結(jié)果將是錯(cuò)的。
這種現(xiàn)象稱為“溢出”,再注意一下:進(jìn)位,并不等于溢出。
因?yàn)檠a(bǔ)碼的這個(gè)特性,所以,在計(jì)算機(jī)中,只是使用補(bǔ)碼存放數(shù)據(jù)。
而原碼、反碼,在計(jì)算機(jī)中,都是不存在的。原碼、反碼的用途,僅僅是用于“筆算”。
其實(shí),筆算的方法,并非只有“取反加一”。另外,-128,有補(bǔ)碼,但是卻沒有原碼反碼!
所以無法用“取反加一”來求 -128 的補(bǔ)碼。所以,大家,完全不必在原碼反碼 上浪費(fèi)時(shí)間精力。文章來源:http://www.zghlxwxcb.cn/news/detail-407541.html
轉(zhuǎn)載請注明,十分感謝~~文章來源地址http://www.zghlxwxcb.cn/news/detail-407541.html
到了這里,關(guān)于Python基礎(chǔ)入門之二進(jìn)制的負(fù)數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!