利用PC-Lint進行代碼靜態分析時,報出以下信息:Info 701: Shift left of signed quantity (int)。從字面上理解這條信息的意思就是:對有符號數(整形)進行了左移。然而,我check的代碼如下(代碼中的uint16_t其實就是unsigned short):
uint16_t index = 1;
uint16_t data;
data = ((uint16_t)1 << index);
明明是對無符號數進行的移位,爲什麼還會報出這條信息,真是百思不得其解,後來將這裏的“(uint16_t)1”改爲“(uint32_t)1”(uint32_t其實就是unsigned long),就沒有報出這條信息了。在網上查了半天資料,終於查到了一些有用的說明,如下圖所述。
意思是說對於上述代碼中的移位操作,由於“(uint16_t)1”的長度小於int的長度,因而會強制轉換爲signed int類型。這樣的話,報出上述信息便不難理解了。