原码、补码、反码、移码


机组--原码、补码、反码、移码

首先,对于正数而言,原码=反码=补码

在开始下面内容前,做以下约定:\(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