整数的二进制表示(补码表示的由来)

整数的二进制表示

原码

正数直接用其 2 进制串表示,如 8 位原码表示 4:0000|0100

对于负数,需要用符号位标记,一般最高位用作符号位,如 8 位原码表示 -4:1000|0100

对于原码,正数相加没什么问题,如 4 + 3:

0000|0100   +4
0000|0011   +3
---------   +
0000|0111   +7

但对于包含负数的加法就会导致运算不准确

  • 如 -4 + (-3):

        1000|0100   -4
        1000|0011   -3
        ---------   +
        0000|0111   +7
    
  • 如 4 + (-3):

        0000|0100   +4
        1000|0011   -3
        ---------   +
        1000|0111   -7
    

因此原码表示不便于加法运算

补码

为了使负数的加法运算准确,需要在原码的基础上对负数的表示做修改,该表示称为补码

要使 -4 的二进制表示满足加法运算,需满足与 +4 相加为 0

0000|0100   +4
????|????   -4
---------   +
0000|0000    0

很明显 -4 的表示应为:1111|1100

负数的补码表示可以总结为以下两条规律(为或的关系):

  • 负数的补码表示为其绝对值的原码按位取反加 1,如 -4 的补码:

    0000|0100   绝对值原码表示
    1111|1011   按位取反
    1111|1100   加 1
    

    已知补码求数值则反过来,如求 1111|1100 的数值:

    1111|1100   补码
    1111|1011   减 1
    0000|0100   按位取反得其绝对值的原码
    
  • 负数的补码表示为其绝对值的原码从右往左第一个 1 开始和之后的位按位取反,如 -4 的补码:

    0000|0100   绝对值原码表示
    1111|1100   从右往左第一个 1 之后按位取反
          ^
    

    已知补码求数值则反过来,如求 1111|1100 的数值:

    1111|1100   补码
          ^     从右往左第一个 1
    0000|0100   该位置之后按位取得其绝对值的原码
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值