将值为 0x80000000 的整数除以 UB 吗?

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

这是代码

printf("%d", 0x80000000 / 10)
。 它打印相对于其绝对值的正确值,但忘记添加减号。让我们检查一下原始整数(有符号)是否为负数。

printf("%d", 0x80000000)
确实是负面的。

但是,如果我将文字包装在整数类型的值内,则除法将保留符号,这是所需的行为。显式转换为

int
除法结果也有效。

我使用的是 clang 版本 18.1.5

c undefined-behavior
1个回答
0
投票

0x80000000
不是
int

0x80000000
是一个正的无符号常量。 所以
0x80000000 / 10
也不是负数。

printf("%d", 0x80000000 / 10)
printf("%d", 0x80000000)
是问题,因为它们尝试使用
unsigned
打印
"%d"

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