使用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