这个问题已经在这里有了答案:




已关闭8年。






我正在使用AMD Phenom II在64位Windows 8上使用Visual Studio 2012,目标是在 Debug模式下使用x64。
所以基本上...

uint64_t Foo = 0xFFFFFFFFFFFFFFFF << 64;//Foo is now 0x0000000000000000
uint64_t Derp = 64;
uint64_t Bar = 0xFFFFFFFFFFFFFFFF << Derp;//Foo is now 0xFFFFFFFFFFFFFFFF

使用较低的值(如63)可以恢复正常行为。
为什么会发生这种情况,我该如何解决?

更新:我切换到 Release模式。瞧,问题消失了,并且都返回了0。但是问题仍然处于 Debug模式,这是调试我的代码所必需的。

最佳答案

如果按大于或等于位宽度的值进行移位,则移位操作具有未定义的行为。

在C++ 11草案的5.8 p1节中:

关于c++ - 在C++中将64位值左移64位可得到奇怪的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11817391/

10-11 22:41
查看更多