补码

1. 为什么要用补码?

  • 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的。

假设有原码A,B,记“(补)A”为求A的补码,则有:
1. (补)((补)A) == A
2. A+B == (补)((补)A + (补)B)
3. (补)(A-B) == (补)A + (补)(-B)
其中1、2称为补码的幂等性,该特性决定我们虽然运算使用补码,但是通过两次补码可以回到原码;3则体现了补码可以将加、减运算统一起来,简化了运算规则

2. 补码定义

  • 正数:
    原码=反码=补码

  • 负数:
    原码
    反码=其原码除符号位之外的各位求反

3. 实例

  • 正零和负零的原码表示分别为00000000和10000000,而它们的补码表示都是一样的00000000

    原码:10000000
    反码:11111111
    补码:11111111+1 = (1)00000000 = 00000000 //符号位也要进位

  • 10000000这个补码表示的哪个数的补码呢?
    这是一个强制规定,这个数表示的是-128(-128是没有原码的,而零有两个原码即+0和-0)
    所以n位补码能表示的范围是[-2^(n-1), 2^(n-1)-1],比n位原码能表示的数多一个

4. 几个特殊定义

  • n位补码能表示的范围:有符号数[-2^(n-1), 2^(n-1)-1];无符号数[0, 2^n-1]
  • -128的补码是10000000
  • 0的补码是00000000

5. 已知补码求原码

  • 正数(首位是0):不变
  • 负数(首位是1):符号位不变,其他位取反,然后加一(相当于再取一遍补码)

参考链接1
参考链接2

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值