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
相同时。
我必须为我的大学项目编写代码来读取二进制文件并打印出整数值。这只是我写的一小部分:
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 anunsigned char
converted to anint
... 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
相同时。