C ++ uint32_t按位右意外结果

时间:2016-01-02 22:48:44

标签: c++ gcc bit-manipulation

我遇到了一些奇怪的问题。在使用-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

0 个答案:

没有答案