विजुअल स्टूडियो 2015 सी ++ का उपयोग, 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
ऐसा लगता है कि संकलक की जगह लग 64 बिट गुणा के साथ 32 बिट गुणा। क्या ऐसा करने की अनुमति है, या यह एक कंपाइलर बग है? जी ++ और क्लैंग दोनों मुझे उन नंबरों को देते हैं जिन्हें मैं उम्मीद करता हूं।
संपादित करें: मैंने अपने कोड को एक सरल संस्करण के साथ अपडेट किया है जिसमें एक ही समस्या है। इसके अलावा, I've just submitted a bug report।
जीसीसी और बजना के साथ कोई रेप्रो। यह बिल्कुल नहीं होना चाहिए। संपादित करें: रेक्सस्टर पर वीएस के साथ भी कोई repro। –
मिंगव और विजुअल स्टूडियो कंपाइलर के साथ भी पुन: पेश नहीं कर सकता है। – SingerOfTheFall
वीएस का कौन सा संस्करण आप उपयोग कर रहे हैं? क्या आपने रिलीज 64 बिट संकलित किया था? – martinus