c ++:为什么整数前面的减号会给出一个疯狂的数字?

c++: Why minus signal in front of an integer gives a crazy number?

我正在使用来自 SFML class 的整数来获取当前 window:

的 y 坐标
sf::window.getSize().y

这带来了例如值:

300

但是我想要负值,所以我把负号放在前面:

- sf::window.getSize().y

然后我明白了:

4294966696

为什么会这样?

正如其他人在评论中所说 window 大小存储为无符号整数,因此取负数的操作最终只会创建一个非常大的正数。

sf::window.getSize().y 是一个无符号值。在取反之前将其转换为有符号值,例如:

-(int)sf::window.getSize().y

至于为什么会发生这种情况,取反运算(很可能是二进制补码运算)会翻转最高位,使该值看起来像一个非常大的数而不是负数。

@NathanOliver 下面的评论是正确的。从无符号值转换为有符号值基本上会丢失一位,因此使用更大的类型是最安全的。实际上,如果您可以保证结果值足够小以适合有符号类型,那么您可以自行选择要使用的有符号类型。