計算機基礎知識查缺補漏:原碼,反碼,補碼

計算機只能識別二進制的數字,即0和1,爲了表示二進制數就有了原碼,反碼和補碼。

原碼

下面是原碼的定義,摘自百度百科

原碼(true form)是一種計算機中對數字的二進制定點表示方法。原碼錶示法在數值前面增加了一位符號位(即最高位爲符號位):正數該位爲0,負數該位爲1(0有兩種表示:+0和-0),其餘位表示數值的大小。

+1 = 0000 0001
-1 = 1000 0001

反碼

正數的反碼是它本身
負數的反碼就是在原碼基礎上符號位不變,其餘各位取反。

+1 = 0000 0001
-1 = 1111 1110

補碼

正數的補碼是它本身
負數的補碼就是對反碼加1。

+1 = 0000 0001
-1 = 1111 1111

java中int值的最大最小值

在計算機中,所有的整型數值均以補碼形式存儲。所以要計算其數值需要先將補碼轉成原碼。

int最大值

int類型佔4個字節,而且前面說過了第一位是符號位,所以int類型的最大值補碼錶示如下

0111 1111 1111 1111 1111 1111 1111 1111

其中第一位0表示的是正數。
因爲正數的補碼和原碼一樣,所以對應的原碼就是

0111 1111 1111 1111 1111 1111 1111 1111

轉成十進制值就是2^31-1,即2147483647。所以int類型最大值就是2147483647。

int最小值

最小值補碼錶示如下

1000 0000 0000 0000 0000 0000 0000 0000

這裏可能有人會疑問爲什麼最小值不是

1111 1111 1111 1111 1111 1111 1111 1111

對於計算機來說,它並不認識負數是什麼。對它來說,最小數是0,最小數的符號位肯定是負數,所以最小的有符號的整數一定是:1(符號位)+0000…

反碼轉補碼加1,補碼轉反碼需要減1
所以得到如下值

1000 0000 0000 0000 0000 0000 0000 0000 - 1 = 0111 1111 1111 1111 1111 1111 1111 1111

但是因爲表示的是負數符號位爲1,所以反碼如下

1111 1111 1111 1111 1111 1111 1111 1111

反碼轉原碼,符號位不變所以還是1,其餘位取反

1000 0000 0000 0000 0000 0000 0000 0000

這時候可能大家又會有疑問了,按照原碼轉十進制的方式,第一位是符號位不考慮,那麼換成十進制不就等於0了嗎。
其實
1000 0000 0000 0000 0000 0000 0000 0000 =
0111 1111 1111 1111 1111 1111 1111 1111 + 1
表示的值是2^31,因爲是負數,所以就是
-2^31,即2147483648。所以int類型最小值就是-2147483648。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章