计算机系统基础学习笔记:整数的补码编码(C语言)

计算机中整数的编码往往不是简单的数值的二进制表示,最常见的有符号数的计算机表示方式就是补码,最高位为符号位。

原码表示

在看补码之前先了解一下原码

decimalbinarydecimalbinary
00000-01000
10001-11001
20010-21010
30011-31011
40100-41100

最高位是符号位,“0”代表正,“1”代表负,数值部分为十进制数值对应的二进制。容易理解,但是缺点明显,从上表中可以看到0的表示不唯一(0000;1000)不利于编程;加减法运算方式不统一;需额外对符号位进行处理,故不利于硬件设计;特别当a<b时,实现a-b比较困难。
故从五十年代开始,整数都采用补码表示。但是浮点数的尾数用原码定点小数表示。

补码表示

学习补码要先理解有关模运算的概念。在一个模运算系统中一个数与它除以“模”后的余数等价。时钟就是一个模十二的系统。

现在的时间是八点,五小时后是一点
8+5=13 ≡ 1 (mod 12)

同样有 8-7=1
即 -7≡5 (mod 12)

一个复数的补码等于模减去该复数的绝对值。0的补码表示是唯一的。
当模确定时,一个数减去小于模的另一数的运算,如a-b,可以转化为a加-b的模。这样就实现了加减法的统一,方便计算机实现。计算机中的运算器就是模运算系统。

设运算器有n位,则运算结果只能保留n位,真值的范围为-2n~2n-1(0的存在使范围不对称),可看成是模为2n的钟表系统(一个超大表盘)。

关于补码的求法

补码定义:[X] =2n+X

  • 若为正数,数值部分相同;若为负数,数值部分各位取反,末位加一。
    例:
    [0110]
    =24+0110
    =1 0000+0110
    =0110 (mod 24)
    [-0010]
    =24-0010
    =1 0000-0010
    =1111-0010+1(各位取反,末位加一)
    =1110
  • 简便方法:真值的数值部分(绝对值的二进制表示)从右向左遇到第一个1的前面各位取反。

将补码转化为真值

正数可以直接根据各位上的权值求出真值。这里重点记录负数的求法。最容易理解的方法是将求补码的过程逆着进行一遍。

更简单的方法是直接根据补码上的权值求真值,这样不用区分正负。最高位权值为负,为-2n-1,其他位正常。

对于负数还可将补码再次各位取反后加一,得到的就是真值,最后再把符号加上就可以了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值