我正在使用SFML类中的整数来获取当前窗口的y坐标:
sf::window.getSize().y
这带来了例如值:
300
但我想要负值,所以我把减号放在前面:
- sf::window.getSize().y
然后我明白了:
4294966696
为什么会这样?
答案 0 :(得分:1)
正如其他人在评论中所说,窗口大小存储为无符号整数,因此采取负面操作的操作最终只会创建一个非常大的正数。
答案 1 :(得分:1)
sf::window.getSize().y
是无符号值。在否定之前将其转换为有符号值,例如:
-(int)sf::window.getSize().y
至于为什么会发生这种情况,否定操作(很可能是二进制补码算法)将翻转最顶部的位,使得该值看起来像一个非常大的数字而不是负数。
@ NathanOliver在下面的评论是正确的。从无符号值转换为有符号值基本上会丢失一位,因此使用更大的类型是最安全的。实际上,如果您可以保证结果值足够小以适合签名类型,那么您可以自己选择要使用的签名类型。