我正在爲Arduino 2560 Mega開發C++庫,並且遇到了一個有趣的錯誤。Arduino上的移位錯誤
uint8_t resolution = 15;
uint32_t numDiscreteLevels = (1 << resolution); //yields a value of 0xFFFF8000
uint32_t numDiscreteLevels = ((uint32_t)1 << resolution); //yields 0x8000 (correct value)
看起來,在第一行中,有符號位在被賦值給變量之前被填充到值上。根據促銷規則,我認爲1應轉換爲無符號整數。但即使如此,我認爲簽名填補只發生在左轉時。
非常感謝! –