byte能表示的數的範圍是 128 127這是為什麼

2023-01-16 14:45:11 字數 5678 閱讀 3310

1樓:丿隨風丶自在非

你這個應該用補碼形式吧

在計算機中,是用補碼形勢表示二進位制數。

正數的補碼是其本身;

負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反,然後加1。

所以最小數的補碼形式為 1 0 0 0 0 0 0 0 ;

它的數值絕對值應該是各位取反再加1,即為

0 1 1 1 1 1 1 1 + 1 = 1 0 0 0 0 0 0 0 = 128

又因為是負數,所以是 - 128

而最大數是正數,原碼和補碼一樣 所以是 +127

一個byte是1個位元組,能表示的數的範圍是-128~127.請問,這是為什麼呢?

2樓:丿隨風丶自在非

你這個應該用補碼形式吧

在計算機中,是用補碼形勢表示二進位制數。

正數的補碼是其本身;

負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反,然後加1。

所以最小數的補碼形式為 1 0 0 0 0 0 0 0 ;

它的數值絕對值應該是各位取反再加1,即為

0 1 1 1 1 1 1 1 + 1 = 1 0 0 0 0 0 0 0 = 128

又因為是負數,所以是 - 128

而最大數是正數,原碼和補碼一樣 所以是 +127

1位元組的表示範圍為-128到127,為什麼不是-128到128

3樓:smile灬微光丶

在計算機中一般來說,一個位元組8位,即可表示 2^8=256,有符號數那就是-128到128了,但實際表示的範圍是-128到127。

在補碼中用(-128)代替了(-0),所以補碼的表示範圍為: (-128~0~127)共256個.

-1-127的結果應該是-128,在用補碼運算的結果中, [1000 0000]補 就是-128。但是注意因為實際上是使用以前的-0的補碼來表示-128, 所以-128並沒有原碼和反碼錶示。(對-128的補碼錶示[1000 0000]補算出來的原碼是[0000 0000]原, 這是不正確的)

使用補碼, 不僅僅修復了0的符號以及存在兩個編碼的問題, 而且還能夠多表示一個最低數. 這就是為什麼8位二進位制,使用原碼或反碼錶示的範圍為[-127, +127], 而使用補碼錶示的範圍為[-128, 127]。

擴充套件資料

原碼:計算十進位制的表示式: 1-1=0

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

如果用原碼錶示,讓符號位也參與計算, 顯然對於減法來說, 結果是不正確的。這也就是為何計算機內部不使用原碼錶示一個數。

為了解決原碼做減法的問題, 出現了反碼:

計算十進位制的表示式: 1-1=0

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

發現用反碼計算減法, 結果的真值部分是正確的。而唯一的問題其實就出現在"0"這個特殊的數值上。雖然人們理解上+0和-0是一樣的, 但是0帶符號是沒有任何意義的。

而且會有[0000 0000]原和[1000 0000]原兩個編碼表示0。

於是補碼的出現, 解決了0的符號以及兩個編碼的問題:

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補 + [1111 1111]補 = [0000 0000]補=[0000 0000]原

這樣0用[0000 0000]表示, 而以前出現問題的-0則不存在了。而且可以用[1000 0000]表示-128:

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補 + [1000 0001]補 = [1000 0000]補

4樓:漁火遊戲解說

因為中間有「0」。

一個位元組8位,即可表示 2^8=256,-128到-1是128,0到127是128,加起來是256。如果是-128到128中間包含「0」,-128到-1是128,0到128是129,那就是257了。

一個位元組,如果採用原碼錶示正整數(含0),可以表達0-255,即 2^8=256,一共256種狀態,從全0到全1的各種排列組合。

如果要表示負數,則符號位需要佔用一位(最高位,1代表負數,0代表正數),因此其絕對值最大範圍為0-127,即2^7=128,一共正負各128種狀態,如果不採用特殊處理,這時候0佔用2個編碼(10000000和00000000),資料表示範圍為-127到-0及+0到127,這樣總體上一個位元組只有255種狀態,因為其中0具有正0和負0之分,這不符合數學意義也浪費一個編碼。

擴充套件資料

補碼的好處:

首先加入沒有補碼,+0 在計算機中的表示0 000 0000. -0 在計算機中的表示1 000 0000. 並不一致。

如果採用補碼-0 的補碼就是 0 000 0000. 兩者一致

其次我們知道8位二進位制的表示形式總共有0000 0000-1111 1111 那麼多,恰好是2^8=256.  也就是說理論上可以表示256個十進位制數字。我們前面知道,-0 在計算機中如果再用原碼 就是1 000 0000 。

如果採用反碼就是1 111 1111. 會多佔用一個表達。

所以如果採用補碼就可以把1 000 0000 這個表達空出來表示一個十進位制數字。 很顯然用它來表示-128 最為合理。

還可以從另外一個角度來理解: -127 的補碼是1000 0001.再減去1 就是1000 0000 。那-127-1=-128.

所以補碼的好處就是計算機的表達位數可以充分利用表示跟多的十進位制數。

5樓:匿名使用者

一個位元組8位,如果採用原碼錶示正整數(含0),可以表達0-255,即 2^8=256,一共256種狀態,從全0到全1的各種排列組合。如果要表示負數,則符號位需要佔用一位(最高位,1代表負數,0代表正數),因此其絕對值最大範圍為0-127,即2^7=128,一共正負各128種狀態,如果不採用特殊處理,這時候0佔用2個編碼(10000000和00000000),資料表示範圍為-127到-0及+0到127,這樣總體上一個位元組只有255種狀態,因為其中0具有正0和負0之分,這不符合數學意義也浪費一個編碼。

除了以上的弊端,還有個原因是,早期硬體很昂貴,一位或者一個編碼的浪費都是不可饒恕的,因此人們想到了另一種編碼把負0利用起來,即當遇到負數時,採用補碼來表示就可以解決這個問題,而遇到正數或0時還是保留原碼錶示。因此這個負0通過補碼演算法處理後自然而然地被利用起來,用來表示-128.

補碼的演算法為:絕對值的原碼各位取反後加1.

例1:負1的補碼:

絕對值的8位原碼為00000001

取反:11111110

加1 :11111111

此時最高位被處理為1,滿足高位為1代表負數的定義。

例2:負128的補碼:

絕對值的8位原碼為10000000

取反:01111111

加1 :10000000

此時同樣的最高位被置為1,同樣滿足高位為1代表負數的定義,同時原先表示負0的編碼被利用起來表示-128。

因此一個位元組的有符號整數範圍為-128到127,至於-1到-128之間的其他負數你可以用這個演算法去驗算,建議用windows自帶的計算器種的程式設計師模式去學習和理解。

6樓:匿名使用者

一位元組是8bit,2的8次方,是256個數,-128到127包括0在內就是256個數。

c語言 1個位元組 範圍為什麼是 -128 — 127,-128怎麼算的

7樓:匿名使用者

正數一個位元組最大隻能是127,128超過了一個位元組能表示的最大值,127是01111111,加1, 00000001等於

10000000,最高為是2的7次方等於128,由於一個位元組的最大值是127,所以128就只能是-128,但是這裡的符號位應該是補全的碼,由於只有一個位元組看不到

8樓:匿名使用者

128的二進位制對應10000000(最前面不是符號位的情況下),那麼-128就是取反加1,即01111111加1,即10000000表示-128。

最前面一位為符號位。

9樓:匿名使用者

看補碼的定義吧,char c = -128; 那麼資料表示就是: 二進位制1000000b == 0x80

10樓:匿名使用者

1個位元組是八位

2的七次方是128

還有一位是符號位

你去查查那個符號位的概念你就會深刻理解了

計算機:byte的取值範圍為什麼是-128~127呢?-0為什麼就能表示成-128就沒問題了呢?

11樓:百小度

這個跟位元組編碼有關byte是一個位元組儲存的,有8個位,也就是8個0、1。8個位的第一個位是符號位,也就是說0000 0001代表的是數字11000 0000代表的就是-1所以正數最大位0111 1111,也就是數字127負數最大為1111 1111,也就是數字-128

12樓:匿名使用者

因為計算機使用二進位制數制1byte即8位二進位制數,而第一位用於代表符號(正數或負數),所以1byte就可以寫成11111111-011111111(沒有-0)。

13樓:李白度

0加127=128 一b表示8位數2^7=128 不能超出這個範圍

j**a byte型別為什麼是(127到-128) 5

14樓:閱者文摘

一個btye型別佔8個位,按照2的八次方來乘積實際等於256,但因為第一位表示的正數還是負數,所以實際是2的7次方來算,所以是127到-128

15樓:瀋陽

分正負啊!0到255全都是正數了。如果分正負,就要各一半了。

16樓:召秋梵悌

一句話回答:最高位是符號位。1代表負數,0代表正數。

j**a資料型別的取值範圍是什麼意思? 上面的-128~127是什麼意思是指**的範圍?

17樓:匿名使用者

int 佔四個位元組,能表示的數字範圍 -2^31~2^31-1

就是說一個位元組能表示的範圍 -2^7 ~ 2^7-1 也就是 -128 ~127

18樓:牲口聖者

byte的取值範圍,如

byte b = -129;(報錯)

byte b = -128;(正確)

byte b = 30;(正確)

byte b = 128;(報錯)

一個帶符號位的位元組為什麼是-128到127,我就想知道-128怎麼來的

19樓:萬能導師

有符號的數字用補語「到」表示:0:00000000。

正數:第一個數字是0,最後七個二進位制數字是正數的絕對值負數:首先是1,把所有的位顛倒過來,加1,也就是負數的絕對值所以根據上面的陳述,版本10000000是一個負數(第一位是1)如果我們取未加權的1,結果仍然是10000000,大小是128,所以1000,0000=-128。

科學計數法能表示小於10的數嗎,如何表示

可以 x 1公式 x 1公式 例 光的速度大約是300,000,000米 秒 全世界人口數大約是 6,100,000,000,將其表現為這樣的形式 6,100,000,000 6.1 10 9或 0.00001 1 10 5,即絕對值小於1的數也可以用科學記數法表示為a乘10 的負n次方的形式。運算...

上的數是6表示個十位上的數是表示個

6表示6個1,十位上的3 表示3個十。16這個數個位上是6,表示 個 十位上的數是1,表示 個 16這個數個位上是6,表示 6 個 1 十位上的數是1,表示 1 個 十 16個位上是 表示6個 十位上是 表示 個 16個位上是 6 表示6個 1 十位上是 1 表示 1 個 十 分析過程如下 數位順序...

甲數和乙數的比是12,乙數和丙數的比是45,甲乙丙數

設甲乙丙分別為2x 4x 5x,那麼作和,11x 55,x 5所以甲乙丙分別為10 20 25.完畢。甲數和乙數的比是1 2,可得甲是乙的1 2乙數和丙數的比是4 5,可知丙是乙的4 5於是有55 1 2 1 5 4 20.乙20 1 2 10.甲20 5 4 25.丙 甲數和乙數的比是1 2,也可...