java基礎知識 原碼和補碼

2021-09-19 15:48:00 字數 1837 閱讀 2134

注意,我們這裡舉列的原碼和反碼只是為了求負數的補碼,在計算機中沒有原碼,反碼的存在,只有補碼。

一.原碼

1>.正數的原碼就是它的本身

假設使用乙個位元組儲存整數,整數10的原碼是:0000 1010

2>.負數用最高位是1表示負數

假設使用乙個位元組儲存整數,整數-10的原碼是:1000 1010

二.反碼

1>.正數的反碼跟原碼一樣

假設使用乙個位元組儲存整數,整數10的反碼是:0000 1010

2>.負數的反碼是負數的原碼按位取反(0變1,1變0),符號位不變

假設使用乙個位元組儲存整數,整數-10的反碼是:1111 0101

三.補碼(再次強調,整數的補碼才是在計算機中的儲存形式。)

1>.正數的補碼和原碼一樣

假設使用乙個位元組儲存整數,整數10的補碼是:0000 1010(第三次強調:這一串是10這個整數在計算機中儲存形式)

2>.負數的補碼是負數的反碼加1

假設使用乙個位元組儲存整數,整數-10的補碼是:1111 0110(第三次強調:這一串是-10這個整數在計算機中儲存形式)

四.在計算機中,為什麼不用原碼和反碼,而是用補碼呢?

因為在使用原碼,反碼在計算時不準確,使用補碼計算時才準確。

1>.使用原碼計算10-10

0000 1010  (10的原碼)

+        1000 1010   (-10的原碼)

1001 0100  (結果為:-20,很顯然按照原碼計算答案是否定的。)

2>.使用反碼計算10-10

0000 1010  (10的反碼)

+   1111 0101  (-10的反碼)

1111 1111  (計算的結果為反碼,我們轉換為原碼的結果為:1000 0000,最終的結果為:-0,很顯然按照反碼計算答案也是否定的。)

3>.使用補碼計算10-10

0000 1010  (10的補碼)

+   1111  0110  (-10的補碼)

1 0000 0000  (由於我們這裡使用了的1個位元組儲存,因此只能儲存8位,最高位(第九位)那個1沒有地方存,就被丟棄了。因此,結果為:0)

五.小試牛刀

有了上面的案例,接下來,我們來做幾個小練習吧,分別計算以下反碼表示的十進位制數字是多少呢?

1>.0b0000 1111

2>.0b1111 1111

計算過程:0b1111 1111(補碼)------>0b1111 1110(反碼)------>0b1000 0001(原碼)

將其換算成原碼之後就可以得到最後的結果為:-1

3>.0b1111 0000

計算過程:0b1111 0000(補碼)------>0b1110 1111(反碼)------>0b10010000(原碼)

將其換算成原碼之後就可以得到最後的結果為:-16

4>.0b1000 0001

計算過程:0b1000 0001(補碼)------>0b1000 0000(反碼)------->0b1111 1111(原碼)

將其換算成原碼之後就可以得到最後的結果為:-127

1.確定byte是1個位元組,也就是8位。

2.最大值 0111 1111

3.最小值 1000 0000。

4.0111 1111 就是127。

5.1000 0000 (補碼,這個補碼最終轉成原碼是最小的值-128)減去1是 1111 1111 按照位取反 1000 0000 得到-128

其他的型別類似

原文:

基礎知識點 原碼, 反碼, 補碼

本篇文章講解了計算機的原碼,反碼和補碼.並且進行了深入探求了為何要使用反碼和補碼,希望本文對大家學習計算機基礎有所幫助 在學習原碼,反碼和補碼之前,需要先了解機器數和真值的概念.乙個數在計算機中的二進位制表示形式,叫做這個數的機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號,正數為0,負數...

計算機基礎知識 原碼反碼補碼

我們知道所有資料最終都是使用二進位制數表達在計算機內表示的,假設計算機為32位作業系統那麼其內部存放的資料是 4個位元組,每個位元組佔8個二進位制位 1byte 8bit 計算機內的負數是以其正值的補碼形式表達的 假設0x 0b其機器內表示為 1 轉換成2進製 0000 1011 2 轉換成4個位元...

計算機基礎知識 原碼反碼補碼

我們知道所有資料最終都是使用二進位制數表達在計算機內表示的,假設計算機為32位作業系統那麼其內部存放的資料是 4個位元組,每個位元組佔8個二進位制位 1byte 8bit 計算機內的負數是以其正值的補碼形式表達的 假設0x 0b其機器內表示為 1 轉換成2進製 0000 1011 2 轉換成4個位元...