5
我目前正在從事需要使用uint8_t的項目。我發現了一個問題,有人可以向我解釋爲什麼會發生這種情況嗎?uint8_t VS uint32_t不同的行爲
//using DIGIT_T = std::uint8_t;
using DIGIT_T = std::uint32_t;
std::uint8_t bits = 1;
DIGIT_T test1 = ~(DIGIT_T)0;
std::cout << std::hex << (std::uint64_t)test1 << std::endl;
DIGIT_T test2 = ((~(DIGIT_T)0) >> bits);
std::cout << std::hex << (std::uint64_t)test2 << std::endl;
在這種情況下,輸出爲預期
ffffffff
7fffffff
,但是當我去掉第一行,我用uint8_t輸出
ff
ff
此行爲導致我的煩惱。
謝謝你的幫助。
Marek
'〜(DIGIT_T)0'相當於'〜(INT)(DIGIT_T) 0「或」〜0「。根據C和C++的規則,算術運算符和位運算符的論點都受到整體升級的限制。請參見[整體推廣段落](http://en.cppreference.com/w/cpp/language/implicit_conversion)。 – ach
積分提升規則意味着如果DIGIT_T支持的範圍小於int,那麼'〜(DIGIT_T)0'等於'〜(int)0'。 – Peter
發佈的代碼是'C++'而不是'C',請刪除'c'標籤 – user3629249