為什麼八位二進位制數表示範圍為 128 127?

2021-07-25 05:15:50 字數 2235 閱讀 4017

首先八位二進位制數0000 0000 ~1111 1111,一共可以表示2^8=256位數,如果表示無符號整數可以表示0~255。計算方法就是二進位制與十進位制之間的轉換。

如果想要表示有符號整數,就要將最前面乙個二進位制位作為符號位,即0代表正數,1代表負數,後面7位為數值域,這就是原碼定義。這樣在現實生活中完全沒有問題,但在計算機中就出現了問題。

數的表示:

在原碼中,0的表示有兩種(+0)0000 0000、(-0)1000 0000,這樣就產生了編碼對映的不唯一性,在計算機上就要區分辨別。然而+0、-0卻沒有什麼現實意義。

數的運算:

為了解決上述數的表示問題,我們可以強制把轉換後的10000000強制認定為-128。但這又出現了乙個新的問題就是數的運算。數學上,1+(-1)=0,而在二進位制中00000001+10000001=10000010,換算成十進位制為-2。顯然出錯了。所以原碼的符號位不能直接參與運算,必須和其他位分開,這就增加了硬體的開銷和複雜性。

這個時候就要引入補碼,補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。反碼定義為:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

先解決第乙個問題,引入補碼是為了解決計算機中數的表示和數的運算問題,使用補碼,可以將符號位和數值域統一處理,即引用了模運算在數理上對符號位的自動處理,利用模的自動丟棄實現了符號位的自然處理,僅僅通過編碼的改變就可以在不更改機器物理架構的基礎上完成的預期的要求。

要解決第二個問題同時理解補碼,首先要理解「模」。

模的概念可以幫助理解補數和補碼。

「模」是指乙個計量系統的計數範圍。如時鐘等。計算機也可以看成乙個計量機器,它也有乙個計量範圍,即都存在乙個「模」。例如:

時鐘的計量範圍是0~11,模=12。表示n位的計算機計量範圍是0~2^(n)-1,模=2^(n)。

「模」實質上是計量器產生「溢位」的量,它的值在計量器上表示不出來,計量器上只能表示出模的餘數。任何有模的計量器,均可化減法為加法運算。

例如:假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法:一種是倒撥4小時,即:10-4=6;另一種是順撥8小時:10+8=12+6=6

在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。對「模」而言,8和4互為補數。實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特性。共同的特點是兩者相加等於模。

對於計算機,其概念和方法完全一樣。n位計算機,設n=8,不討論符號位, 則所能表示的最大數是11111111,若再加1成為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進位制系統的模為2^9。在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以了。把補數用到計算機對數的處理上,就是補碼。

例如-8,可以看做0-8,即0000 0000 - 0000 1000,小減大,像高位借一,即1 0000 0000 - 0000 1000 = 1111 1000,這個可以看做用模數來減去該數,會得到該數的補數。同時上式也可以看做 (1111 1111 - 0000 1000)+1,即0000 1000 取反加1。

負數補碼定義是相對應的正數原碼取反加一,這個同負數的反碼末尾加一是同樣的效果。注意看反碼的定義。取反加一是逐位取反,包括符號位。

對乙個正數的原碼取反加一,得到這個正數對應負數的補碼。例如~6=-7,而且加一之後會多出乙個八進位制補碼1000 0000,而這個補碼就對應著原碼1000 0000,數字位同時當做符號位即-128。

根據以上內容我們就可以來解釋八位二進位制數的表示範圍

八位二進位制正數的補碼範圍是0000 0000 ~ 0111 1111 即0 ~ 127,負數的補碼範圍是正數的原碼0000 0000 ~ 0111 1111 取反加一(也可以理解為負數1000 0000 ~ 1111 1111化為反碼末尾再加一)。

所以得到 1 0000 0000 ~ 1000 0001,1000 0001作為補碼,其原碼是1111 1111(-127),依次往前推,可得到-1的補碼為1111 1111,那麼補碼0000 0000的原碼是1000 0000符號位同時也可以看做數字位即表示-128,這也解釋了為什麼127(0111 1111)+1(0000 0001)=-128(1000 0000)。

在計算機中資料用補碼表示,利用補碼統一了符號位與數值位的運算,同時解決了+0、-0問題,將空出來的二進位制原碼1000 0000表示為-128,這也符合自身邏輯意義的完整性。因此八位二進位制數表示範圍為-128~+127。

補碼的求法以及八位二進位制補碼所能表示的數的範圍

補碼用來解決整數的儲存問題,整數在計算機中是以二進位制的補碼形式進行儲存的,求十進位制對應的二進位制補碼 1求正整數的二進位制補碼 正整數的二進位制補碼與其二進位制原碼相同,2 求負整數的二進位制補碼 先求與該負數相對應的正整數的二進位制 然後所有位取反加1,不夠位數時左邊補1,例如,求 3的二進位...

集合的二進位制整數表示

在程式中表示集合的方法有很多種,當集合中的元素個數較小時候,可以用二進位制來表示,每乙個二進位制轉換成十進位制的整數可以唯一的表示乙個集合。這個技巧也在演算法競賽中經常用到。比如有乙個集合 那麼我們可以進行如下操作 空集.0 只含有第i個元素的集合.1 i 1 向集合中加入第i個元素s s 1 比如...

c語言二進位制數表示 C語言位操作

了解位的基本概念 熟悉二進位制數的運算方法 掌握各種位運算的方法和技巧 熟悉位段的基本概念 掌握位段中資料的引用方法 掌握數值的轉換方法和技巧 c語言區別於其他語言的重要特點是支援位運算,使其能夠完成組合語言所能完成的大部分功能。在實際的程式設計中借助與位運算往往可以設計出簡潔的演算法,使程式簡化,...