如果這個量不會有負值,那麼我們可以使用無正負的型別。
分正負的型別,稱為有符號型別;無正負的型別(只有正值),稱為無符號型別。
(紅色為最高位)
單位元組數: 1111 1111
雙位元組數:1111 1111 1111 1111
四位元組數:1111 1111 1111 1111 1111 1111 1111 1111
當乙個數是無符號型別時,那麼其最高位的1或0,和其它位一樣,用來表示該數的大小。
當乙個數是有符號型別時,最高數稱為「符號位」。為1時,表示該數為負值,為0時表示為正值。
無符號型別中,所有的位都用於直接表示該值的大小。我們舉乙個位元組的數值對比:
無符號型別: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
有符號型別: 0111 1111 值:127 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20
同樣是乙個位元組,無符號型別的最大值是255,而有符號型別的最大值是127。原因是有符號型別中的最高位被挪去表示符號了。
有符號型別的長處是它可以表示負數。雖然它的在最大值縮水了,卻在負值的方向出現了伸展。我們仍用乙個位元組的數值對比:
無符號型別: 0 -----------------------------255
有符號型別: -128 --------- 0 ---------- 127
二者能表達的數值的個數都是256個。無符號型別表達的是 0~255 這256個數,有符號型別表達的是 -128 ~ 127這256個數。
有符號型別的負數使用補碼表示。
有 int 型別的數,值為5,那麼,我們知道它在計算機中表示為:
00000000 00000000 00000000 00000101
如果是 -5,在計算機中如何表示?負數以補碼表達。
(1)原碼:乙個整數,按照絕對值轉換成的二進位制數,稱為原碼。
比如 00000000 00000000 00000000 00000101 是5和-5 的原碼。
(2)反碼:原碼按位取反,就是反碼。
取反操作指:1變0; 0變1
00000101每一位取反,得11111010。
(3)補碼:補碼=反碼+1。
00000101 的反碼是:11111010。
補碼 = 11111010 + 1 = 11111011
-5在計算機中表達為:11111011。轉換為十六進製制:0xfb。
我們來看int型整數-1在計算機中如何表示:
1、先得原碼: 00000001
2、得反碼: 11111110
3、得補碼: 11111111
-1在計算機裡用二進位制表達就是全1。16進製為:0xff。
***********************************=參考****************************************=
二進位制值(1位元組) 十進位制值
1000 0000 -128
1000 0001 -127
1000 0010 -126
1000 0011 -125
... ...
1111 1110 -2
1111 1111 -1
-1是最大的負整數。
1111 1111 - 1 = 1111 1110,而1111 1110就是-2。
這樣一直減下去,當減到只剩最高位用於表示符號的1以外,其它低位全為0時,就是最小的負值了,最小的負值是1000 0000,也就是-128。
位元組數 二進位制值 十進位制值
單位元組數 1111 1111 -1
雙位元組數 1111 1111 1111 1111 -1
四位元組數 1111 1111 1111 1111 1111 1111 1111 1111 -1
計算機組成原理學習筆記(2) 無符號數和有符號數
第一篇學習了計算機組成原理的核心,馮諾依曼結構。由於確實沒學好,就不從頭開始學了。這一篇開始學習計算機的運算方法。首先來學習無符號數和有符號數。基本就是學習基本概念,然後提出問題,解決問題這樣的學習節奏。什麼是無符號數?就是沒有符號位的數,機器字長為16位時,表示範圍是0 65535。什麼是有符號數...
計算機中的有符號數和無符號數
1.概念 在計算機中,可以區分正負型別的數,成為 有符號數 signed 無正負型別的數 只有整數型別 成為 無符號數 unsigned 簡明的說,無符號說就是其所有的位數都用來表示數值的大小,有符號數除最高位來表示數值的正負外 0表示正數 1表示負數 其餘各位用來表示數值的大小。舉個例子說明一下 ...
有符號數和無符號數在計算機中怎麼區分?
確如題主所說,計算機中儲存的任何資料都是二進位制形式,單看資料是無法認定其格式和內容的。計算機要用二進位制編碼來表達數值的符號,最直觀的方法就是符號位。但為了保證基本算術運算在正負數上的一致性,x86計算機對負數採用了特殊的編碼方式,即補碼。為什麼補碼這麼巧妙實現了正負數的加減運算?參見維基百科 補...