這篇文章非常清楚的講解了原碼、反碼、補碼的概念
下面是對這篇文章的摘抄
機器數:十進位制中的數 +3 ,計算機字長為8位,轉換成二進位制就是00000011。
如果是 -3 ,就是 10000011 。
00000011 和 10000011 就是機器數
真值:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制:
[+1]
原 = 0000 0001 [-1]
原 = 1000 0001
取值範圍 [1111 1111 , 0111 1111] [-127 , 127] 原碼是人腦最容易理解和計算的表示方式.反碼的表示方法是:正數的反碼是其本身;負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反可見如果乙個反碼表示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算.
補碼的表示方法是:正數的補碼就是其本身;負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補 [-1] = [10000001]原 = [11111110]反 = [11111111]補對於負數, 補碼表示方式也是人腦無法直**出其數值的. 通常也需要轉換成原碼在計算其數值.
10000000 表示 -128,所以8位二進位制資料表示範圍為[-128, 127] [10000000, 01111111]
人腦可以知道第一位是符號位, 在計算的時候我們會根據符號位, 選擇對真值區域的加減. (真值的概念在本文最開頭). 但是對於計算機, 加減乘數已經是最基礎的運算, 要設計的盡量簡單. 計算機辨別"符號位"顯然會讓計算機的基礎電路設計變得十分複雜! 於是人們想出了將符號位也參與運算的方法. 我們知道, 根據運算法則減去乙個正數等於加上乙個負數, 即: 1-1 = 1 + (-1) = 0 , 所以機器可以只有加法而沒有減法, 這樣計算機運算的設計就更簡單了.
於是人們開始探索 將 (1)符號位參與運算, (2)並且只保留加法的方法.
注意:(1)正整數的補碼就是自身,負整數的補碼就是其相反數(結果相加為0)。這句話嚴格意義不對的!!
(2)neg指令是取得補碼,這句話嚴格意義也是不對的!!
補碼就是一種編碼,neg就是取得相反數!-3的補碼是[11111101],3的補碼是[00000011],[11111101]+[00000011]=[100000000],結果是100000000,往前其實是進了一位的!就是轉了一圈,又回到了正確的點。
neg 3是-3 ; -3的neg是3.計算機的表示方式都是補碼奧!
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 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進製 的實踐要比二或三進製計數出現的晚.摘...