原码、补码、反码、移码

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

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

在开始下面内容前,做以下约定: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补码为:[2N+1|X|]

如:X = -13 =[1101] => [1101]=[11101] ,其中二进制位数为 5 => 25=32

因此其 补码为:[X]=32|13|=19=[10011]

另法二:

对负定点小数的原码X,从右往左扫描,尾数的第一个1及其右部的0保持不变,左部的各位取反,符号位保持不变。

[X]=[1.1110011000] =>1.0001101000

补码转原码:

规则:对于负数,补码的除符号位取反后+1

[13]=[10011] =>取反=>[11100] =>+1=>[13]=[11101]

移码

一个真值的移码和补码仅差一个符号位,将补码符号位取反即可得到移码。

附录

一些码的可表示范围:

n 位码 最小值 最大值
无符号小数 0 12n
无符号整数 0 2n1
定点小数 (12n) 12n
定点整数 (2n1) 2n1
原码纯小数 (12(n1)) 12(n1)
原码纯整数 (2(n1)1) 2(n1)1
反码纯小数 (12(n1)) 12(n1)
反码纯整数 (2(n1)1) 12(n1)
补码纯小数 1 (比原码多表示1) 12(n1)
补码纯整数 2n (比原码多表示2n) 2(n1)1
posted @   Mercurows  阅读(1029)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示