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;
}