C:无法用带符号的int表示负值

我必须为我的大学项目编写一个代码,该代码可以读取二进制文件并打印出整数值。这只是我写的一小段内容:

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

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

iCMS 回答:C:无法用带符号的int表示负值

但是,我无法打印负值。

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

fgetc(fp)返回一个unsigned char范围或EOF范围内的值。
所有非EOF值都将永远不会为负 1

... fgetc函数将获得的字符作为unsigned char转换为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相同时。

本文链接:https://www.f2er.com/2073328.html

大家都在问