補碼、原碼、反碼,這些都是計算機專家編造的詞匯。
事實上,它們,都不應該存在。
計算機的運算,是很簡單的,和這些詞匯,並沒有任何關系。
--------------------------
妳想象壹下:
有壹個小朋友,很小的,大概是三歲吧。
他只會數壹百個數(0~99),會加法,還不會做減法。
那麽,妳可以這樣教他:加 99,就是減壹。
比如: 25 - 1 = 24
25 + 99 = (壹百) 24
讓他只取 2 位數,忽略進位,結果,就是正確的。
--------------------------
上面是壹個簡單的例子,卻說明了壹個事實:
做計算時,限定了位數,正數,就能當做負數使用。
限定了位數,有兩個意義:
數值是循環的,具有周期性;
有沒有進位,都不必考慮。
代替負數的正數,怎麽求呢?
公式,妳壹定能看出來: 正數 = 負數 + 周期。
--------------------------
在計算機中,8 位 2 進制,稱為壹個字節。
計數值範圍是:0000 0000~1111 1111。
對應的十進制:0 ~ 255。
計數周期,是:2^8 = 256。
這裏,***有 256 個機器數。
較大的128 個,就可以代表負數了:
-1 補碼就是:-1 + 256 = 255 = 1111 1111。
-2 的補碼 = 254 = 1111 1110 (二進制)。
。。。
-128 的補碼 = 128 = 1000 0000 (二進制)。
較小的 128 個,就代表自身的數值了:0 ~ 127。
--------------------------
減法算式: 5 - 7 = -2, 用 8 位補碼計算如下:
5 = 0000 0101
-7 的補碼 = 1111 1001
--相加---------------
得: (0)? 1111 1101? = -2 的補碼在這裏,用加法代替減法,略去進位,結果,就完全正確。
--------------------------
用正數(補碼)代替了負數,減法運算也就沒有了。
因此,計算機的硬件,就可以得到簡化了。
所以,在計算機系統中,負數,壹律采用補碼表示和存儲。
原碼和反碼,在計算機中,根本就不能用。
事實上,它們,根本就不存在。
--------------------------
什麽是補碼? 為什麽要用補碼?
看完上面的介紹,相信妳都有了答案。
那麽,原碼和反碼,就沒有任何意義了。
這兩種代碼,只是用來求補碼的過渡而已。
其實,原碼和反碼,還有“取反加壹”,都是“雞肋”。
浪費不少時間學習這些,卻不能理解補碼的意義何在。
況且,用“取反加壹”求 0 和-128 的補碼,就是難事。
-128,它沒有原碼和反碼,拿什麽取反加壹?
-0 的補碼,求出來是 0000 0000。
符號位,居然是 0 !
難道,負零,是正數嗎?
有人說,零,不分正負,所有只有壹個補碼。
那麽,原碼反碼中,為什麽有兩個零?
--------------------------
其實,原碼反碼符號位取反加壹,就是壹大篇自相矛盾的謬論。
小學生都弄懂的事,他們竟然弄出這許多騷操作!
老外數學不好,由此可見壹斑。