PC-Lint代碼靜態檢查之Info 701: Shift left of signed quantity (int)

利用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類型。這樣的話,報出上述信息便不難理解了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章