原碼、補碼、反碼、移碼


機組--原碼、補碼、反碼、移碼

首先,對於正數而言,原碼=反碼=補碼

在開始下面內容前,做以下約定:\(X\)表示真值,\([X]_原\)表示原碼,\([X]_反\)表示反碼,\([X]_補\)表示補碼。並且您可能需要一定的將十進制數轉化為二進制數的基礎。

有符號數與無符號數

  • 無符號數:整個機器字長的全部二進制均為數值位

    如 :

    \(X=+27\)

    無符號數為:\(11011\)

  • 有符號數:在"無符號數"的最高位添加符號位:+:0,-:1

    如 :

    \(X=+27\)

    有符號數為:\(011011\)

    \(X=-27\)

    有符號數為:\(111011\)

原碼

機器數最高位表示符號,其余位表示該數的絕對值

如果規定了機器字長,而我們的原碼位數又不夠時,需要我們進行補零,之后再修改符號位。

具體的:

  • 當為整數時:在有效數值最高位前面補零,不影響整體取值。之后將最高位修改為符號位

    假定機器字長為8位

    \(X=+27\)\([X]_原\)\(00011011\)

    \(X=-27\)\([X]_原\)\(10011011\)

  • 當為小數時:在有效數值最低位后面補零,不影響整體取值。之后再將最高位修改為符號位

    假定機器字長為8位(定點小數表現形式可見下方"定點小數")

    \(X=+0.625\)\([X]_原\)\([0.1010000]\)

    \(X=-0.625\)\([X]_原\)\([1.1010000]\)

值得注意的是,真值0有兩種不同形式表達:\([+0]_原=[0000]、[-0]_原=[1000]\)

機器數的定點表示

  • 定點小數:純小數,小數點 . 位置在符號位之后、有效數值部分最高位之前。符號位:+:0、-:1,位於最前。

    這里的純小數指的是,整數部分為零。\(0.0101\) √、\(1.0101\) ×、

    如:\([+0.625]_原 = [0.101]\)\([-0.125]_原 = [1.001]\)

  • 定點整數:純整數,小數點 . 位置在有效數值位最低位之后。且在最前面用逗號, 將整數部分與符號位隔開

    如:\([+27]_原\) = \(0,11011\)\([-27]_原\) = \(1,11011\)

反碼

對於正數,其反碼與原碼形式一致。

\([+27]_原=00011011\) => \([+27]_反\) = \(00011011\)

\([+0.625]_原=[0.1010000]\) => \([+0.625]_反=[0.1010000]\)

對於負數,將原碼的符號位保持不變,其余部分按位取反。

假定機器字長8位

\([-27]_原\) = \(10011011\) => \([-27]_反\) = \(11100100\)

\([-0.625]_原=[1.1010000]\) => \([+0.625]_反=[1.0101111]\)

補碼

原碼轉補碼:

對於正數,其補碼與原碼形式一致。

對於負數,在反碼的基礎上+1。

\([-27]_原\) = \(10011011\) => $ [-27]_補$= \([-27]_反+1\) = \(11100100\) +1 = \(11100101\)

\([-0.625]_原=[1.1010000]\) => \([-0.625]_補\) = \([-0.625]_反+1=1.0101111+1\) = \(1.0110000\)

另法一:

假設負純整數X,將其轉化為原碼共有二進制位數\(N+1\),則X補碼為:\([2^{N+1}-|X|]\)

如:X = -13 =\([-1101]\) => \([-1101]_原=[11101]\) ,其中二進制位數為 \(5\) => \(2^5=32\)

因此其 補碼為:\([X]_補=32-|-13| = 19 = [10011]\)

另法二:

對負定點小數的原碼X,從右往左掃描,尾數的第一個1及其右部的0保持不變,左部的各位取反,符號位保持不變。

\([X]_原=[1.1110011000]\) =>1.0001101000

補碼轉原碼:

規則:對於負數,補碼的除符號位取反后+1

\([-13]_補=[10011]\) =>取反=>\([11100]\) =>+1=>\([-13]_原=[11101]\)

移碼

一個真值的移碼和補碼僅差一個符號位,將補碼符號位取反即可得到移碼。

附錄

一些碼的可表示范圍:

\(n\) 位碼 最小值 最大值
無符號小數 0 \(1-2^{-n}\)
無符號整數 0 \(2^n-1\)
定點小數 \(-(1-2^{-n})\) \(1-2^{-n}\)
定點整數 \(-(2^{n}-1)\) \(2^{n}-1\)
原碼純小數 \(-(1-2^{-(n-1)})\) \(1-2^{-(n-1)}\)
原碼純整數 \(-(2^{(n-1)}-1)\) \(2^{(n-1)}-1\)
反碼純小數 \(-(1-2^{-(n-1)})\) \(1-2^{-(n-1)}\)
反碼純整數 \(-(2^{(n-1)}-1)\) \(1-2^{-(n-1)}\)
補碼純小數 \(-1\) (比原碼多表示\(-1\)) \(1-2^{-(n-1)}\)
補碼純整數 \(-2^n\) (比原碼多表示\(-2^n\)) \(2^{(n-1)}-1\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM