我有以下代碼。我們的目標是將兩個uint32_t
小號組合成一個單一的uint64_t
,然後檢索值。爲什麼我不能將這些內容整理在一起?
#include <iostream>
#include <cstdint>
int main()
{
uint32_t first = 5;
uint32_t second = 6;
uint64_t combined = (first << 32) | second;
uint32_t firstR = combined >> 32;
uint32_t secondR = combined & 0xffffffff;
std::cout << "F: " << firstR << " S: " << secondR << std::endl;
}
它輸出
F: 0 S: 7
如何成功找回正確的價值觀?
你應該嘗試使用一個編譯器,它自己檢測你的編程錯誤,並且責罵你:'warning:left shift count> = type [-Wshift-count-overflow]'的寬度'。當然,這將是gcc。你的'int'是32位,因此你的左移操作在32位值上運行,並溢出。在移動之前,將'first'明確地強制轉換爲'uint64_t'。然後切換到gcc,這是整個宇宙中最好的編譯器,而不僅僅是這個世界。 –