考虑以下代码:
signed a = -1;
unsigned b = UINT_MAX;
printf("%d\n", a==b);
signed char c = -1;
unsigned char d = UCHAR_MAX;
printf("%d\n", c==d);
结果将是:
1
0
为什么
char
的“==”基于实际值,而int
的“==”基于位表示?
考虑这段代码:
signed char a = -1;
unsigned char b = 255;
printf(“%d\n”, a);
printf(“%d\n”, b);
signed c = -1;
unsigned d = UINT_MAX;
printf(“%d\n”, c);
printf(“%d\n”, d);
结果将是:
-1
255
-1
-1
%d
代表 char
根据实际值而不是 int
有符号和无符号类型之间的比较行为涉及 C 中的类型提升和转换规则。当有符号值与无符号值进行比较时,有符号值会转换为无符号值,这可能会导致意外结果。 %d 格式说明符打印有符号类型的实际值,而对于无符号类型,它将它们的值表示为正整数。
如果您的意思是 d 的输出应该是 4294967295,那是正确的。 printf("%d 的输出 ", d); 应反映无符号表示,它不是 -1。