原码、反码、补码、移码及其运算
原碼:
如果機器字長為n,那么一個數的原碼就是用一個n位的二進制數,其中最高位為符號位:正數為0,負數為1。剩下的n-1位表示概數的絕對值。
例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 10101011
位數不夠的用0補全。
PS:正數的原、反、補碼都一樣:0的原碼跟反碼都有兩個,因為這里0被分為+0和-0。
反碼:
知道了什么是原碼,那反碼就更是張飛吃豆芽——小菜一碟了。知道了原碼,那么你只需要具備區分0跟1的能力就可以輕松求出反碼,為什么呢?因為反碼就是在原碼的基礎上,符號位不變其他位按位取反(就是0變1,1變0)就可以了。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100
補碼:
補碼也非常的簡單就是在反碼的基礎上按照正常的加法運算加1。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]補=11010101
PS:0的補碼是唯一的,如果機器字長為8那么[0]補=00000000。
移碼:
移碼最簡單了,不管正負數,只要將其補碼的符號位取反即可。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]補=11010101,[X]移=01010101
運算過程:原碼->反碼->補碼->移碼
原碼 :二進制(開頭第一個表示符號0正1負)
反碼 :在原碼的基礎上,符號位不動,其他位取反 —注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
補碼 :在反碼的基礎上,運算+1 —注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
公式:兩數補碼的和==兩數和的補碼。移碼 :在補碼的基礎上,符號位取反
101011(二進制)–> 原碼 00101011 --> 反碼 01010100 --> 補碼 01010101–> 移碼 11010101
知道了計算方式后,我們應該研究一下源碼、反碼、補碼的作用是什么?
1 首先看源碼
問:什么是源碼?
答:數字的二進制形式(二進制的數)
問:為什么要用源碼?
答:我是從2個方面看 1 從目前計算機的構造來看它只認識1/0,所以任何指令、數字、都會翻譯成一個二進制數傳遞給計算機。
2 規范和統一計算機的“交流語言”,統一對外的接口。總結:源碼是計算機唯一認識的語言結構。
2 反碼和補碼
問:反碼是什么?
答:在源碼的基礎上符號位不動,其他取反
問:為什么要用反碼?
答:這個問題需要配合補碼一起查看,因為補碼=反碼+1 所以一般的計算順序為 源碼–>反碼–>補碼
*問:補碼是什么?
答: 補碼=反碼+1(符號位參與運算)
問:為什么要用補碼?
答:為了進行做加減運算,因為計算機只有加法計算器,所以a-b的處理方式為a+(-b),而這過程中如果直接用源碼進行計算會出現問題
例1 10+(-10)= 0 (當使用源碼進行計算減法)
10(十進制) – 00001010(源碼)
-10(十進制) – 10001010 (源碼)
00001010+
10001010
1XXXXXXX ----->首先看到第一位是負數,顯然不是我們想要的結果
例子2 10-11 (試試用減法直接做計算吧)
10(十進制) – 00001010(源碼)
-11(十進制) – 10001011(源碼)
00001010-
10001011
xxxxx11111----->可以看到貌似跟答案-1(十進制)差距還是比較明顯的
現在我們嘗試應用補碼進行計算
例子3 10+(-10)=0 (使用補碼)
10(十進制) — 00001010(源碼)----同源碼(反碼)----同源碼(補碼)
-10(十進制) — 10001010(源碼)----11110101(反碼)----11110110(補碼)
00001010+ 10的源碼----注意正數用補碼(值等同于源碼)
11110110 -10的補碼----注意負數用補碼
00000000 得到了0的補碼
例子3 10-11 (使用補碼)
10(十進制) — 00001010(源碼)----同源碼(反碼)----同源碼(補碼)
-11(十進制) — 10001011(源碼)----11110100(反碼)----11110101(補碼)
00001010+ 10的補碼
11110101 -11的補碼
11111111— 得到了-1的反碼
從這4個例子可以看出反碼和補碼使用的作用了,用于為二進制負數做運算時的一種轉換。
再次總結運算過程
數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的范圍為 127~(-127)
運算過程:原碼->反碼->補碼->移碼
原碼 :二進制(開頭第一個表示符號0正1負)
反碼 :在原碼的基礎上,符號位不動,其他位取反 —注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
補碼 :在反碼的基礎上,運算+1 —注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
公式:兩數補碼的和==兩數和的補碼。移碼 :在補碼的基礎上,符號位取反
總結
以上是生活随笔為你收集整理的原码、反码、补码、移码及其运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据库】Apache Doris :
- 下一篇: 增鑫科技更新招股书,冲刺深交所上市,正邦