计算机原理及基础 —— 有符号类型和无符号类型
1、是否需要有正負。
如果這個量不會有負值,那么我們可以使用無正負的類型。
分正負的類型,稱為有符號類型;無正負的類型(只有正值),稱為無符號類型。
2、使用二制數中的最高位表示正負。
(紅色為最高位)
單字節數:?1111 1111
雙字節數:?1111 1111 1111 1111
四字節數:?1111 1111 1111 1111 1111 1111 1111 1111
當一個數是無符號類型時,那么其最高位的1或0,和其它位一樣,用來表示該數的大小。
當一個數是有符號類型時,最高數稱為“符號位”。為1時,表示該數為負值,為0時表示為正值。
3、無符號類型和有符號類型的范圍區別。
無符號類型中,所有的位都用于直接表示該值的大小。我們舉一個字節的數值對比:
無符號類型: 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個數。
有符號類型的負數使用補碼表示。
?
?4. 原碼、反碼、補碼
有 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. 補碼表:
二進制值(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。
2. 不同字節數的整數中,如何表達-1這個數:
字節數?? ?二進制值?? ?十進制值
單字節數?? ?1111 1111?? ?-1
雙字節數?? ?1111 1111 1111 1111?? ?-1
四字節數?? ?1111 1111 1111 1111 1111 1111 1111 1111?? ?-1
參考連接 : https://blog.csdn.net/android_bar/article/details/76571925?
?
總結
以上是生活随笔為你收集整理的计算机原理及基础 —— 有符号类型和无符号类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机原理与基础 —— 进制之间
- 下一篇: 计算机原理与基础 —— 原码、反码、