为什么1不大于-0x80000000。我知道这与溢出有关。但有人可以解释为什么吗? 0x80000000 不是一个常量吗?我认为它是?
assert(1 > -0x80000000);
C++ 中的断言触发器。这是为什么?
我很感谢所提供的一些答案。但是C++标准是否定义常量需要存储在32位整数中?为什么编译器不能识别 80000000 不适合 32 位整数并使用 64 位呢?我的意思是,最大的 32 位 int 可以是 0x7FFFFFFF。 0x80000000 显然比这个大。为什么编译器仍然使用 32 位呢?
根据C和C++标准,-0x80000000
不是整数常量。这是一个表达方式,比如3 + 5
。在这种情况下,它是常数0x80000000
,由否定运算符进行操作。对于具有 32 位的编译器int
s, 0x80000000
不能表示为int
,但可以表示为unsigned int
。但是对无符号整数求负是在无符号上下文中(奇怪地)完成的。所以这里的否定实际上没有任何作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)