原碼 反碼 補碼 數學公式分析

2021-08-08 04:45:19 字數 2679 閱讀 5869

0--正數   1--負數  對於n+1位的二進位制數(包括符號位)

對於定點整數

當x>0時,原碼表示為x,這個很好理解

當x<0時,x的原碼是在|x|(即-x)的二進位製碼的符號位(即首位)將0改為1,所以數值上是相當於在|x|的大小上加上乙個2^n,圖示中x為負數,所以減去乙個負數等於加上該數的絕對值,2^n-x正是我們推導的。                

需要注意的地方:舉個例子,我們假設現在x= -1,其原碼是1,001(一共四位包括符號位),根據上圖公式,所以x的原碼大小應該為2^n-x即2^3 -(-1)= 9  即 1,001。

好,問題就出現在這裡,你算出來的數值大小是9,然而這個9所代表的二進位製碼卻是-1,so,你理清楚邏輯了嗎?

實際上我們公式推導出的是指這個數的二進位制大小,其最高位我們不認為是符號位,而在原碼的真正表達過程中,則將最高位的視為符號位,這就是衝突所在,當你用數學公式表示這個碼值大小時,是直接將其看為一串二進位制數的大小,符號預設為正,而這個無符號的數值大小則剛好對應有符號的負數原碼。

對於定點小數

當x>0時,原碼表示為x

當x<0時,同理x的原碼是在|x|(即-x)的二進位製碼的符號位(即首位)將0改為1,所以數值上是相當於在|x|的大小上加上乙個1,圖示中x為負數,所以減去乙個負數等於加上該數的絕對值,1-x正是我們推導的。

稍微解釋下:對於n+1位的定點整數,去除符號位後有n位,能表示2^n個數,因為0要佔一種情況,所以只能表示從0到2^n-1共2^n個數,所以最大為2^n-1,同理對於負數,注意原碼有正零與負零。

對於n+1位定點小數,去除符號位後有n位,最大的數為0.11111……1(n個1),因為0.11111……1(n個1) + 0.00000(n-1個0)1 = 1  所以最大數為1 - 0.0000(n-1個0)1即1-2^(-n),同理對於負數

對於n+1位的二進位制數(包括符號位)

簡單來說,正數的反碼與正數的原碼相等,負數的反碼與負數絕對值的原碼取反相等。

我們來考慮下取反怎麼用數學方式描述,假定有個數為-7,二進位制位10000111(8位,最高位為符號位),取反後應該為01111000,其實可以把它看做為被11111111減後得到。即

-    01111000

11111111實際上數值大小為2^8-1=255   即對於n位的整數x,對其取反,相當於2^n-1 - x

下面考慮下小數取反如何用算式描述,假定有個小數為0.0000001,取反後應該為1.11111110,可以看做其取反後是被1.11111111減去後得到的。即

1.1111111

-    0.0000001

1.1111111

1.1111111= 1 + 0.1111111        數值大小為1 + (1-2^(-7)) = 2-2^(-7)   即對於n位的小數x,對其取反,相當於2-2^(-(n-1)) - x

對於定點整數

當x>0時,x的反碼等於x的原碼,表示為x。

當x<0時,x的反碼是等於對|x|(即-x)取反,對於n+1位的二進位制數負數x,取反後數值大小為2^(n+1)-1- |x|,去除絕對值,得到反碼的數值大小為 2^(n+1)-1 + x

對於定點小數

當x>0時,x的反碼等於x的原碼,表示為x。

當x<0時,x的反碼是等於對|x|(即-x)取反,對於n+1位的小數x,對其取反,相當於2-2^(-n) -|x|,去除絕對值,得到反碼的數值大小2-2^(-n) +x

對於n+1位的二進位制數(包括符號位)

簡單來說,正數的補碼與正數的原碼相等,負數的補碼等於負數補碼在末位加1,即負數絕對值的原碼取反後末位加1。

對於定點整數

當x>0時,x的補碼等於x,與原碼相同

當x<0時,x的補碼等於|x|取反後末位加一,|x|的取反,套用上面已推的公式為2^(n+1)-1 +x。末位加一,即數值再加上一,最後補碼為2^(n+1) +x

對於定點小數

當x>0時,x的補碼等於x

當x<0時,x的補碼等於|x|取反後末位加一,|x|的取反,套用上面已推的公式為2-2^(-n) +x,末位加一,即數值上加上了0.0000000...(n-2個0) 1,為2^(-n),所以最後補碼為2+x

本文章由

@風淺_wei

@qq.com

原碼 反碼 補碼分析

反碼 正數 反碼和原碼相同 負數 最高位為符號位為1,其餘位原碼取反 補碼 正數 原碼 反碼和補碼相同 負數 最高位符號位為1,其餘位為原碼取反,在對整個書加1 計算機中原碼用於表示有符號的正數和無符號整數 ex int x 1 在記憶體中十六進製制的表示方式為 0000 00001 0000 00...

原碼 反碼 補碼簡單分析

原碼 signed magnitude 是一種計算機中對數字的二進位制定點表示方法。原碼表示法在數值前面增加了一位符號位 即最高位 msb 為符號位 正數該位為0,負數該位為1 0有兩種表示 0和 0 其餘位表示數值的大小。優點 簡單直觀 例如,我們用8位二進位制表示乙個數,則 11的原碼為0000...

原碼 補碼和反碼分析

補碼是為了解決計算機的減法問題,計算的本質是取模。計算機只有加法運算器,沒有減法,所以引入符號位,例1001表示 1 注 從硬體的角度上看,只有正數加負數才算減法。正數與正數相加,負數與負數相加,其實都可以通過加法器直接相加。2.引入符號位後會出現問題 因為要用負數表示減法,所以這裡符號位也有參與運...