我使用Visual Studio 2015 C++版本14.0.25431.01 Update 3,我的代码出现了意外行为。在64位Release模式下编译和运行:
#include <iostream>
#include <stdint.h>
int main(int, char**) {
for (uint32_t i = 1; i < 3; ++i) {
uint32_t a = i * 0xfbd1e995;
uint64_t b = a;
std::cout << a << " 32bit" << std::endl;
std::cout << b << " 64bit" << std::endl;
}
}
我期望a
和b
具有相同的值,但是当我运行代码时,输出结果如下:
4224838037 32bit
4224838037 64bit
4154708778 32bit
8449676074 64bit
看起来编译器用64位乘法代替了32位乘法。这样做是允许的吗,还是这是编译器的错误?g++和clang都给我预期的结果。
编辑:我已经用一个更简单的版本更新了我的代码,但是仍有同样的问题。此外,我刚刚提交了一份错误报告。