原碼,反碼,補碼的作用

2021-10-08 09:37:42 字數 1611 閱讀 6629

機器數是計算機中的二進位制表示形式, 機器數是帶符號的

原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值

正數的反碼是其本身

負數的反碼是在其原碼的基礎上,符號位不變,其餘各個位取反

正數的補碼就是其本身

負數的補碼是在其原碼的基礎上,符號位不變,其餘各位取反,最後+1

[+1] = [0000 0001]原= [0000 0001]反= [0000 0001]補

[-1] = [1000 0001]原= [1111 1110]反= [1111 1111]補

目的: 機器可以只有加法而沒有減法,這樣計算機運算的設計更簡單

1. 用反碼計算減法,結果的真值部分是正確的, 出現了反碼:

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

= [1111 1111]反 = [1000 0000]原 = -0

問題: 出現了 +0 和 -0

2. 補碼的出現,解決了0的符號問題以及0的兩個編碼問題

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

= [1 0000 0000]補 = [0000 0000]補

3. 補碼的出現增加乙個值, 可以用[1000 0000]表示-128

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

同餘操作

兩個整數a,b,若它們除以整數m所得的餘數相等,則稱a,b對於模m同餘

記作 a ≡ b (mod m), 讀作 a 與 b 關於模 m 同餘。

例如:

4 mod 12 = 4

16 mod 12 = 4

所以4,16 對於模 12 同餘。

定理

同餘數的兩個定理:

(1) 反身性:

a ≡ a (mod m)

(2)線性運算定理:

如果a ≡ b (mod m),c ≡ d (mod m) 那麼:

1) a ± c ≡ b ± d (mod m)

2) a * c ≡ b * d (mod m)

得到:7 ≡ 7 (mod 12)     (-2) ≡ 10 (mod 12)

--> 7 -2 ≡ 7 + 10 (mod 12)

乙個數的反碼,實際上是這個數對於乙個模的同餘數。而這個模並不是我們的二進位制,而是所能表示的最大值!這就和鐘錶一樣.

其實,在反碼的基礎上+1,只是相當於增加了模的值:

負數取模操作

x mod y = x - y * [ x / y ] (注釋: 取x與y的商的下界, ,除法取整)

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...