C : 无法用 signed int 表示负值

C : Unable to represent negative values with signed int

我必须为我的大学项目编写代码来读取二进制文件并打印出整数值。这只是我写的一小部分:

signed int ch;
    while ((ch = fgetc(fp)) != EOF) {
            print("Value of n=%d", ch);
    }

但是,我无法让它打印出负值。我的意思是,如果打印值 if 33, 33,否则如果值为 -33,则给出 223 out.I 我仍然是初学者,对于糟糕的代码感到抱歉。我尝试将值读取为十六进制,然后打印出来,但这不起作用。使用 %d 读取文件也不起作用。我可以通过将数字转换为二进制,检查符号位,然后进行 2 的补码来获得正确的值,但我必须在稍后阶段正确 return 值而不进行任何操作,因此这不是一个可行的解决方案.综上所述,我想读取一个负值,存储它,打印它,而不需要任何其他操作。如果有人知道我做错了什么,请帮忙!如果这是一个初学者问题,再次抱歉。

However, I can't get it to print out negative values.

signed int ch;
while ((ch = fgetc(fp)) != EOF) {
        print("Value of n=%d", ch); 
}

fgetc(fp) returns unsigned char 范围内的值或 EOF.
所有非EOF值都必然永远不会是负数1.

... the fgetc function obtains that character as an unsigned char converted to an int ... C17dr § 7.21.7.1 2


如果 OP 想要读取 32 位二进制数据,并将其解释为整数:

int32_t i;
while (fread(&i, sizeof i, 1, fp) > 0) {
  printf("%ld\n", (long) i);
}

1 迂腐的异常。当 char 大小与 int 相同时。