共用方式為


C6297

警告 C6297: 算術溢位: 對 32 位元值進行移位運算,然後再轉型成 64 位元值。 結果可能不是預期的值

這則警告指出從整數提升規則所產生的不當行為以及型別,該型別比一般會執行算術的型別還大。

在此情況下,32 位元的值會向左移位,而該移位的結果則會轉型成 64 位元的值。 如果移位會溢位 32 位元的值,則位元會遺失。

如果您不想讓位元遺失,則可在將值移位之前,先將它轉型成 64 位元的數量。 如果想要讓位元遺失,則可以執行適當的轉型,轉型成不帶正負號的 Long 或 Short 型別,或者將移位的結果進行遮罩,也可以消除此一警告,並讓程式碼能更為清楚地表達其目的。

範例

下列程式碼將產生出這個警告:

void f(int i)
{
  unsigned __int64 x;

  x = i << 34;
  // code 
}

若要更正這則警告,請使用下列程式碼:

void f(int i)
{
  unsigned __int64 x;
  // code
  x = ((unsigned __int64)i) << 34;
}

請參閱

參考

編譯器警告 (層級 1) C4293