二進位制補碼
計算機儲存資料都是以0,1二進位制進行儲存。
對於有符號整數儲存(對於浮點數待續),引入補碼概念。
原碼即直接將真值轉換為其相應的二進位制形式,而反碼和補碼是對原碼進行某種轉換編碼方式。
對於正整數, 原碼,反碼和補碼都相一樣
對於負整數, 補碼等於反碼加1,而反碼等於原碼除符號位不變其他位按位求反
以byte為例,
1 byte 等於 8bit,也就是8個二進位制,
最高位0代表正數,1代表負數。
所以對於8位的二進位制所有全排列: 0000 0000 -> 1111 1111 一共 2^8 = 256, 即可以表示256個整數(-128 -> 0 -> 127)
整數 原碼 反碼 補碼
-128 1000 0000 1111 1111 1000 0000
-127 1111 1111 1000 0000 1000 0001
-126 1111 1110 1000 0001 1000 0010
***
-1 1000 0001 1111 1110 1111 1111
0 0000 0000 0000 0000 0000 0000
1 0000 0001 0000 0001 0000 0001
***
127 0111 1111 0111 1111 0111 1111
採用補碼的原因如下。
二補數(2's complement)/補碼 系統的最大優點是可以在加法或減法處理中,不需因為數字的正負而使用不同的計算方式。只要一種加法電路就可以處理各種有號數加法,
而且減法可以用乙個數加上另乙個數的二補數來表示,因此只要有加法電路及二補數電路即可完成各種有號數加法及減法,在電路設計上相當方便。
採用補碼運算具有如下兩個特徵:
1)因為使用補碼可以將符號位和其他位統一處理,同時,減法也可以按加法來處理,即如果是補碼表示的數,不管是加減法都直接用加法運算即可實現。
3-1 :
0000 0011
+ 1111 1111
-------------
10000 0010 -> 忽略 符號位前1位 即 0000 0010 -> 2
2)兩個用補碼表示的數相加時,如果最高位(符號位)有進製,則進製被捨棄。
這樣的運算有兩個好處:
1)使符號位能與有效值部分一起參加運算,從而簡化運算規則。從而可以簡化運算器的結構,提高運算速度;(減法運算可以用加法運算表示出來。)
2)加法運算比減法運算更易於實現。使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。
二進位制補碼
計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的是十進位制,正如 亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘自 數學發展史 有空大家可以看看哦...
二進位制補碼
二進位制補碼主要是為了解決負整數的加減法運算 減法轉化為加法 原碼表示法就是用二進位制的最高位表示符號,0表示正數,1表示負數。以8位為例 1就是表示為0000 0001,1表示為1000 0001.而補碼的規則是正整數保持不變,針對負整數,除符號位外,其他位全部取反,然後 1。注 負整數中,原碼轉...
二進位制補碼
在計算機系統中,數值一律用二進位制補碼進行表示,補碼的計算規則是 補碼 等於 原碼按位 取反 再 加 1。有符號型別的數值,最高位是符號位,1為負數,0為正數。按照補碼計算規則,可得 正數的補碼等於其原碼。如 char num num 1 如 1 的原碼是 0000 0001 補碼也是 0000 0...