c - 十六进制值等于负值

标签 c int hex signed

什么 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”之外,必须有一些值可以返回“==”。

最佳答案

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

这是因为当你对 2 的补码中的 8000 求反时,你将补码加 1,所以就是 7FFF + 1 或者回到 8000 .在十进制表示中,数字是 -32768

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

关于c - 十六进制值等于负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083566/

相关文章:

c - MinGW 中的 g++、make 和 GDB 安装在哪里?

c - 如何用 fwrite() 覆盖偏移量 Y 上的 X 个字节?

C - 我可以对这两个不同的列表使用相同的函数吗?

java - 如何正确混合两种int颜色

Java Integer 添加前导零?

C++ cout 十六进制值?

c - 将数据从十六进制解包为 float

c - Sutherland Hodgman多边形裁剪算法

java - Android:将 int 值从一个 Activity 传递到另一个 Activity

objective-c - 使用 Objective-C 读取 .mobileprovisioning 配置文件