我遇到了一些奇怪的问题。在使用-1
声明uint32_t变量后,我得到4294967295
,这是正确的。所以二进制它看起来像
1111 1111 1111 1111 1111 1111 1111 1111
它是32位。但如果我正在尝试执行以下代码,我会采取意想不到的行为。
uint32_t data = (uint32_t) -1;
std::cout << "Before: " << data << std::endl;
std::cout << "After << 31: " << (data >> 31) << std::endl;
std::cout << "After << 32: " << (data >> 32) << std::endl;
结果是:
Before: 4294967295
After << 31: 1
After << 32: 4294967295
我正在使用MinGW w64