次の方法で共有


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