次の方法で共有


警告 C6297

算術オーバーフローです: 32 ビット値はシフトされ、64 ビット値にキャストします。 結果は予期した値にならないことがあります。

解説

この警告は、整数の上位変換規則と、算術が通常実行される型よりも大きい型の結果として生じる正しくない動作を示しています。

この場合、32 ビット値は左にシフトされ、そのシフトの結果は 64 ビット値にキャストされました。 シフトが 32 ビット値をオーバーフローした場合、ビットが失われます。

ビットが失われないようにするには、値を 64 ビット数にシフトするようにキャストしてから、シフトします。 ビットが失われるようにするには、unsigned long または short 型への適切なキャストを実行します。 または、シフトの結果をマスクします。 どちらの方法でも、この警告が排除され、コードの意図が明確になります。

コード分析名: RESULTOFSHIFTCASTTOLARGERSIZE

この警告が発生するコード例を次に示します。

void f(int i)
{
  unsigned __int64 x;

  x = i << 34;
  // code
}

この警告を解決するには、次のコードを使用します。

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

関連項目

コンパイラの警告 (レベル 1) C4293