使用Visual Studio 2015 C++,14.0.25431.01更新3.我的代码中有意外的行为。编译和64位运行,释放:将uint32_t转换为uint64_t会产生不同的值?
#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
它看起来像编译器替换32位乘法与64位乘法。它允许这样做,还是这是一个编译器错误? g ++和clang都给了我期望的数字。
编辑:我更新了我的代码与更简单的版本,具有相同的问题。另外,I've just submitted a bug report。
用gcc和铿锵没有摄制。这绝对不应该发生。编辑:也没有与rextester VS的repro。 –
不能用mingw和visual studio编译器重现。 – SingerOfTheFall
你使用什么版本的VS?你编译了Release 64bit吗? – martinus