这是代码
printf("%d", 0x80000000 / 10)
。
它打印相对于其绝对值的正确值,但忘记添加减号。让我们检查一下原始整数(有符号)是否为负数。
printf("%d", 0x80000000)
确实是负面的。
但是,如果我将文字包装在整数类型的值内,则除法将保留符号,这是所需的行为。显式转换为
int
除法结果也有效。
我使用的是 clang 版本 18.1.5
0x80000000
不是 int
。
0x80000000
是一个正的无符号常量。 所以 0x80000000 / 10
也不是负数。
printf("%d", 0x80000000 / 10)
和 printf("%d", 0x80000000)
是问题,因为它们尝试使用 unsigned
打印 "%d"
。