为什么1不大于-0x80000000.我知道它与溢出有关.但有人可以解释为什么吗?是0x80000000不是常数我认为是吗?
assert(1 > -0x80000000);
Run Code Online (Sandbox Code Playgroud)
断言在C++中触发.这是为什么?
我很感激所提供的一些答案.但是C++标准是否定义了常量需要存储在32位整数中?为什么编译器没有认识到80000000不适合32位整数并且使用64位呢?我的意思是,最大的32位int可以是0x7FFFFFFF.0x80000000明显大于那个.为什么编译器仍然使用32位呢?
Sne*_*tel 13
根据C和C++标准,-0x80000000不是整数常量.这是一个表达,就像3 + 5.在这种情况下,它是常数0x80000000,由否定运算符操作.对于具有32位ints的编译器,0x80000000不能表示为int,但可表示为unsigned int.但是,在无符号上下文中(否则)否定无符号整数.所以这里的否定实际上没有效果.
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |