C语言中原码、反码、补码的知识点总结

在计算机中,原码反码补码 是三种用于表示整数带符号整数。以下是

1. 原码(Sign-Magnitude)

  • 原码是最直观的表示方法,最高位用于表示符号,剩余位表示数值的大小。
  • 符号位:0 表示正数,1 表示负数。
  • 例如,用 8 位二进制表示 +5 和 -5:
    • +5 的原码:0000 0101
    • -5 的原码:1000 0101
  • 缺点:原码在计算机加减运算中不方便,尤其是处理负数时会比较复杂。

2. 反码(Ones' Complement)

  • 反码是对原码的改进方法,用来简化计算,尤其是减法。
  • 正数的反码:与原码相同。
  • 负数的反码:对原码的符号位不变,其他位取反。
  • 例如,用 8 位二进制表示 +5 和 -5:
    • +5 的反码:0000 0101
    • -5 的反码:1111 1010
  • 特点:反码解决了一部分加减运算的问题,但仍然存在“正负零”的问题(+0 的反码是 0000 0000,-0 的反码是 1111 1111)。

3. 补码(Two's Complement)

  • 补码是现代计算机中最常用的整数表示方法,因为它能解决正负零问题,并简化加减法运算。
  • 正数的补码:与原码相同。
  • 负数的补码:对其反码加 1。
  • 例如,用 8 位二进制表示 +5 和 -5:
    • +5 的补码:0000 0101
    • -5 的补码:1111 1011
  • 特点
    • 补码表示范围:对于 8 位整数,补码的表示范围是 -128(1000 0000)到 +127(0111 1111)。
    • 只有一种零(+0 的补码是 0000 0000,-0 的补码也是 0000 0000)。
    • 方便进行加减法运算,因为负数的补码加法等同于减法。

总结对比

表示方法正数表示负数表示特点与缺点
原码原码与实际值相同符号位为 1,数值部分不变计算不便,有正负零问题
反码反码与原码相同符号位不变,其他位取反有正负零问题,负数表示有利于计算
补码补码与原码相同反码加 1解决正负零问题,适合加减法,计算机常用

应用场景

  • 补码是计算机中广泛使用的整数表示方式,因为它能简化硬件的加减法实现,且没有正负零问题。

知识点补充:二进制1111 1111加1为什么等于0000 0000?

在二进制中,1111 11111 结果是 0000 0000,这是因为二进制加法的进位规则。让我们详细看看这个计算过程。

步骤解析:1111 11111

我们从最右边的一位开始逐位相加,按照二进制加法规则来理解:

      1111 1111
  +           1
  --------------
    1 0000 0000
  1. 最右边的位:1 + 1 = 0,产生一个进位(1)。
  2. 倒数第二位:1 + 1 = 0,继续产生一个进位。
  3. 继续逐位进位:每一位都是 1 + 1,结果是 0,并且产生进位。
  4. 最左边的位:1 + 1 = 0,产生一个进位。

最终,左边的进位“溢出”,因为在 8 位二进制系统中,我们只保留 8 位,所以最后的结果是 0000 0000

理解溢出

在 8 位二进制系统中,加 1 导致所有位都进位,结果返回 0000 0000,这种现象称为溢出。就像在十进制中,999 + 1 = 0000(在某些特定场合下,比如在一个四位的计数器中),二进制也遵循类似的循环进位规则。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值