【发布时间】:2025-12-23 19:35:11
【问题描述】:
输出是 128 的 32 位 2 的补码,即 4294967168。如何?
#include <stdio.h>
int main()
{
char a;
a=128;
if(a==-128)
{
printf("%u\n",a);
}
return 0;
}
【问题讨论】:
-
请注意,4294967168 是 0xFFFFFF80。 -128 是 0x80。在您的平台上,
char是一个签名类型。 -
char可以签名或未签名,具体取决于系统。如果您的系统将char定义为有符号,并且您的CHAR_BIT是8 位,那么您可以在char中存储的最大正数是127。 -
使用
printf("%u\n",a);打印负数int(或转换为int的值)是未定义的行为。 -
@4386427 见 C11 §6.5.2.2 6 和 §7.21.6.1 9