八位二進位制補碼最小值
好吧,小編雖然上個C++語言和VB語言基礎,雖然那個愛笑的從國外留學回來的老師講課很好很精彩,但無奈小編跟不上呀。所以下面是小編給大家總結的和二進位制補碼知識點。
8位二進位制補碼錶示整數的最小值是 -128, 最大值是 +127.
原因:正數的補碼就是其本身,8位二進位制最大正整數是 0111111,也就是十進位制值 127。
負數的補碼是它原數的反碼加1,最小值,就是負得最多的數,
即二進位制 1000 0000。十進位制-128。
推導: -128 =***-1***+***-127*** = 原碼 1000 0001+原碼 1111 1111 =
補碼 1111 1111 + 補碼 1000 0001 = 補碼 1000 0000。
什麼是二進位制的補碼?
註明:正數的補碼與負數的補碼一致,負數的補碼符號位為1,這位1即是符號位也是數值位,然後加1
補碼借鑑的模概念,雖然理解起來有點晦澀難懂。可以跳過
模的概念:把一個計量單位稱之為模或模數。例如,時鐘是以12進位制進行計數迴圈的,即以12為模。
在時鐘上,時針加上***正撥***12的整數位或減去***反撥***12的整數位,時針的位置不變。14點鐘在捨去模12後,成為***下午***2點鐘***14=14-12=2***。從0點出發逆時針撥10格即減去10小時,也可看成從0點出發順時針撥2格***加上2小時***,即2點***0-10=-10=-10+12=2***。因此,在模12的前提下,-10可對映為+2。由此可見,對於一個模數為12的迴圈系統來說,加2和減10的效果是一樣的;因此,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這就把減法問題轉化成加法問題了***注:計算機的硬體結構中只有加法器,所以大部分的運算都必須最終轉換為加法***。10和2對模12而言互為補數。同理,計算機的運算部件與暫存器都有一定字長的限制***假設字長為16***,因此它的運算也是一種模運算。當計數器計滿16位也就是65536個數後會產生溢位,又從頭開始計數。產生溢位的量就是計數器的模,顯然,16位二進位制數,它的模數為2^16=65536。在計算中,兩個互補的數稱為“補碼”。比如一個有符號8位的數可以表示256個數據,最大數是0 1 1 1 1 1 1 1***+127***,最小數1 0 0 0 0 0 0 0 ***-128***;那麼第255個數據,加2和減254都是一樣的效果得出的結果是第一個資料 ,所以2和254是一樣的效果。對於255來說2和254是互補的數。
求一個正數對應補碼是一種數值的轉換方法,要分二步完成:
第一步,每一個二進位制位都取相反值,即取得反碼;0變成1,1變成0。比如,00001000的反碼就是11110111。
第二步,將上一步得到的反碼加1。11110111就變成11111000。所以,00001000的二進位制補碼就是11111000。也就是說,-8在計算機***8位機***中就是用11111000表示。
不知道你怎麼看,反正我覺得很奇怪,為什麼要採用這麼麻煩的方式表示負數,更直覺的方式難道不好嗎?
二進位制補碼的好處
首先,要明確一點。計算機內部用什麼方式表示負數,其實是無所謂的。只要能夠保持一一對應的關係,就可以用任意方式表示負數。所以,既然可以任意選擇,那麼理應選擇一種用的爽直觀方便的方式。
二進位制的補碼就是最方便的方式。它的便利體現在,所有的加法運算可以使用同一種電路完成。
還是以-8作為例子。假定有兩種表示方法。一種是直覺表示法,即10001000;另一種是2的補碼錶示法,即11111000。請問哪一種表示法在加法運算中更方便?隨便寫一個計算式,16 + ***-8*** = ?16的二進位制表示是 00010000,所以用直覺表示法,加法就要寫成:
00010000
+10001000原碼形式-8
---------
10011000
可以看到,如果按照正常的加法規則,就會得到10011000的結果,轉成十進位制就是-24。顯然,這是錯誤的答案。也就是說,在這種情況下,正常的加法規則不適用於正數與負數的加法,因此必須制定兩套運算規則,一套用於正數加正數,還有一套用於正數加負數。從電路上說,就是必須為加法運算做兩種電路。所以用原碼錶示負數是不行的。
現在,再來看二進位制的補碼錶示法。
00010000
+11111000補碼形式-8
---------
100001000
可以看到,按照正常的加法規則,得到的結果是100001000。注意,這是一個9位的二進位制數。我們已經假定這是一臺8位機,因此最高的第9位是一個溢位位,會被自動捨去。所以,結果就變成了00001000,轉成十進位制正好是8,也就是16 + ***-8*** 的正確答案。這說明了,2的補碼錶示法可以將加法運算規則,擴充套件到整個整數集,從而用一套電路就可以實現全部整數的加法。***特別說明,有部分素材來自博主JQ_AK47***