【问题标题】:How is the manipulation is done on bit level?操作是如何在位级别完成的?
【发布时间】:2015-06-04 21:08:00
【问题描述】:

假设char的大小为1字节,负数以2的补码形式存储

#include<stdio.h>
int main()
{
    char c = 125;
    c = c+10;
    printf("%d", c);
    return 0;
}

答案怎么会是-121?

【问题讨论】:

标签: c++ binary logic


【解决方案1】:

125 + 10 = 135。这高于 127,因此加法溢出,最终结果为 135 - 256 = - 121。

【讨论】:

  • 数字127对于chars有什么意义?
  • @JohnOdom 它的 2^7 - 1。因为 1 位用于符号 127 是单个字符可以表示的最大值。
  • @NathanOliver John Odom 可能有点迂腐,但他提出的观点在技术上是正确的(最好的正确)。没有什么会强制 char 成为 8 位值。
  • @PeteBaughman Nathan 并没有说它是 强制 为 8 位值。只是它。 John 可能正在考虑其他语言,例如 Java 或 C#。
  • @MrLister:我相信这将是不同的平台。不同的平台可以有不同的char 位。 CDC Cyber​​ 使用 6/12 位方案,6 位用于流行事物,12 位用于扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多