原碼是機器數中最簡單的一種表示形式,符號位為0表示正數,符號位為1表示負數,數值位即是真值的絕對值,故原碼又稱為帶符號的絕對值表示。譬如101的原碼是0,101。我們用逗號","
","",
"作為符號位和數值部分的分隔符。
原碼正數定義
[ x]
原=
0,x \quad 2^n>x\geq 0\\ 2^n-x,0\geq x>-2^n\\ \end
[x]原=
x,\quad 1>x\geq 0\\ 1-x, \quad 0 \geq x>-1\\ \end
[x]原=
0,x \quad 2^n\geq x \geq0\\ 2^+x \quad 0>x\geq-2^n(mod 2^) \end
[x補]=
2n+1
而不是2
n2^n
2n呢?舉個例子來解釋。比如−
101-101
−101
如果用模3來求補碼:[
−101]補
=1000
−101=0
,011
[-101]_補=1000-101=0,011
[−101]
補=1
000−
101=
0,01
1這樣就和正數的補碼產生衝突了。所以我們用模2n+
12^
2n+1
來求負數的補碼。這個例子就是
[
−101]補
=10000
−101=1
,011
[-101]_補=10000-101=1,011
[−101]
補=1
0000
−101
=1,0
11這樣就符合了我們的理解了。
補碼小數表示式
[ x]
補=
x\quad 1>x\geq0\\ 2+x\quad 0>x\geq-1(mod2) \end
[x]補=
=0.111
xmax=
0.11
1與1差了0.001,但是我們直接用1去加的話就只能得到0.001這同樣產生了衝突。所以要用2來加。
關於0的補碼
我們以整數為例子。[−0
]補
=100
−000
=100
[-0]_補=100-000=100
[−0]補
=100
−000
=100
捨去1也就是00。
[ +0
]補=0
[+0]_補=0
[+0]補
=0所以
[ −0
]補=[
+0]補
[-0]_補=[+0]_補
[−0]補
=[+0
]補反碼就比較容易了。他就是把原碼的每一位取反。這裡也給出數學表示式,有了前面補碼和原碼的學習,反碼的數學表示式易如反掌。
反碼整數表示式
[ x]
反=
0,x\quad 2^n>x\geq0\\ (2^-1)+x \quad 0\geq x>-2^n \end
[x]反=
0,x\quad 1>x\geq0\\ (2-2^)+x \quad 0\geq x>-1 (mod(2-2^)) \end
[x]反=
{0,x
1>x≥
0(2−
2−n)
+x0≥
x>−1
(mod
(2−2
−n))
原碼-補碼
①每位取反 ②末位+1
不管是整數還是小數 原碼到補碼,補碼到原碼都可以這麼算。讀者可自行驗算幾個碼。
原碼-反碼
每位取反,反之亦然。
補碼-反碼
末位減一,反之末位加一
計算機中原碼 反碼 補碼
首先要明白,在計算機中,數以二進位制的形式存在,其中有無符號數和有符號數 無符號數的,相當於十進位制中的自然數,沒有負數,因此八位無符號數的範圍 00000000 11111111,而有符號數的最高位表示符號,最高位為0表示整數 0000 0001 1 最高位為1表示負數 1000 0001 1 原...
計算機中的原碼 反碼和補碼
計算機中的原碼 反碼和補碼 看到這個標題,很多人有話要說了,切!這個東西每一本計算機基礎知識的書中都有介紹的,你還拿出來show什麼嘛!我的原則是你需要就來看一看,懂就不要去理會,倒也不必諷刺兩句,我相信總有需要它的人。當初我看書是沒看明白的,在網上查了好多資料才有所悟。前幾天跟老婆講原碼 反碼和補...
計算機中的原碼 反碼 補碼分析
今天給學生上數字邏輯第一節課,主要講了數制,後面簡單提及了原碼 反碼和補碼,碰到了兩個問題 第一,十進位制數轉八進位制數,學生練習時卡殼,不知道無從下手 第二,原本以為原碼 反碼 補碼應該是一年級甚至中學時就應該解決的問題,實際上原來根本不是這麼回事。中學老師即使講過,估計也是對付考試的方式簡單提及...