signed int 和 unsigned int 基于字节相等。但没有签名 cahr 和 unsigned char

问题描述 投票:0回答:1

考虑以下代码:

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
  1. 为什么

    char
    的“==”基于实际值,而
    int
    的“==”基于位表示?

  2. 考虑这段代码:

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 integer char byte
1个回答
0
投票

有符号和无符号类型之间的比较行为涉及 C 中的类型提升和转换规则。当有符号值与无符号值进行比较时,有符号值会转换为无符号值,这可能会导致意外结果。 %d 格式说明符打印有符号类型的实际值,而对于无符号类型,它将它们的值表示为正整数。

如果您的意思是 d 的输出应该是 4294967295,那是正确的。 printf("%d 的输出 ", d); 应反映无符号表示,它不是 -1。

© www.soinside.com 2019 - 2024. All rights reserved.