我有以下功能:C++ - 警告:右移位計數型的> =寬度32位計算機上
void func(unsigned long v)
{
char max_byte = 0xFF;
char buffer[8];
buffer[0] = static_cast<char>((v) & max_byte);
buffer[1] = static_cast<char>((v >> 8) & max_byte);
buffer[2] = static_cast<char>((v >> 16) & max_byte);
buffer[3] = static_cast<char>((v >> 24) & max_byte);
buffer[4] = static_cast<char>((v >> 32) & max_byte);
buffer[5] = static_cast<char>((v >> 40) & max_byte);
buffer[6] = static_cast<char>((v >> 48) & max_byte);
buffer[7] = static_cast<char>((v >> 56) & max_byte);
}
它接受一個unsigned long
參數,並插入其8個字節到char
緩衝液(不嘗試找出原因,這是一個有意義功能的簡潔版本)。
此代碼編譯以及在64位,但在32位,我得到以下警告:
warning: right shift count >= width of type
參考線:
buffer[4] = static_cast<char>((v >> 32) & max_byte);
buffer[5] = static_cast<char>((v >> 40) & max_byte);
buffer[6] = static_cast<char>((v >> 48) & max_byte);
buffer[7] = static_cast<char>((v >> 56) & max_byte);
我想我明白了警告,但我不當然我該怎麼做才能在32位上順利編譯它。
是的,它是[未定義的行爲](http://stackoverflow.com/questions/18918256/is-right-shift-undefined-behavior-if-the-count-is-larger-than-the -width-of-the-t/18918340#18918340)執行寬度大於或等於位數的移位。 –
32位系統上'unsigned long'的長度是多少? – Codor
@ShafikYaghmour我明白,但解決方案是什麼。 'unsigned long'的長度是64位,我需要正確處理它。 – idanshmu