【问题标题】:Hexadecimal value equal to negative value十六进制值等于负值
【发布时间】:2014-03-31 18:29:54
【问题描述】:

什么 16 位十六进制有符号 int 值适用于此代码:

#include <stdio.h>

int main() {
  while (1) {
    int i;
    if (scanf("%x", &i) != 1) break;
    printf("%d %s -%d\n", i, (i == -i) ? "==" : "!=", i); 
  }
  return 0;
}

返回“==”必须有一些值,而不是“0”。

【问题讨论】:

  • 为什么必须有?十六进制与此有什么关系?
  • 这是一个作业的摘录,但问题相当简单。十六进制只是二进制位的表示。
  • 你在这里没有使用十六进制 - 这无关紧要,除非我们没有看到任务的一部分。整数没有固有的(十进制、十六进制、二进制)表示,除非您将它们写成字符串。

标签: c int hex signed


【解决方案1】:

8000(十六进制)将是答案(在 16 位机器上)。

这是因为当你在 2 的补码中取反 8000 时,你取的是补码加 1,所以是 7FFF + 1 或返回到 8000。在十进制表示中,数字是-32768

对于给定的代码,这将是真的如果int 对于给定的编译器和处理器是 16 位。否则,i 需要声明为 short int 或只是 short

【讨论】:

  • 建议 0x8000-32768 而不是 -65536
  • @chux 哈哈,不错,谢谢。计算机规则:一个人总是偏离 2 倍。;)
  • Within a factor of 2 有时就足够了。
猜你喜欢
  • 2014-11-30
  • 2015-02-11
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 2013-01-26
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多