【发布时间】:2023-02-08 22:24:21
【问题描述】:
#include <stdio.h>
int main() {
unsigned int n = 10;
char m = -1;
if (m < n)
printf("m < n\n");
else
printf("m > n\n");
printf("m + n = %u", m + n);
}
当我在 Windows 上的 MinGW64 中运行此代码时。它打印“m > n”,“m + n = 9” 我不明白为什么“m + n = 9”和“m > n”。
【问题讨论】:
-
char不保证一定会被签到。您可能有一个未签名的char类型,所以 -1 实际上是 255。 -
@Jason 在这种特定情况下,签名无关紧要。
unsigned char应该给出相同的结果m > n。和signed char一样。 -
@Lundin,你是对的。那是非常不直观的。
-
@ikegami 在发布/编辑历史中。但我想这个问题中有一个特定的问题,
unsigned char给出值 0xFF 但signed char0xFFFFFFFF 因为在前一种情况下,符号转换发生在赋值时,而在后一种情况下,符号转换发生在隐式提升时。 -
我也将“is char signed”规范欺骗添加到重复列表中,因为它对 9 vs 256 结果很重要。
标签: c