次の方法で共有


警告 C26452

算術オーバーフロー: 左シフト数が負か、オペランド サイズ以上で、未定義の動作 (io.3)

解説

この警告は、シフト数が負であるか、シフトされたオペランドのビット数以上であることを示します。 どちらの場合も、未定義の動作が発生します。

警告 C4293 は、Microsoft C++ コンパイラでも同様のチェックです。

コード分析名: SHIFT_COUNT_NEGATIVE_OR_TOO_BIG

unsigned long long combine(unsigned lo, unsigned hi)
{
  return (hi << 32) | lo; // C26252 here
}

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

unsigned long long combine(unsigned lo, unsigned hi)
{
  return (static_cast<unsigned __int64>(hi) << 32) | lo; // OK
}

関連項目

26450
26451
26453
26454
ES.101: ビット操作に符号なし型を使用する
ES.102: 演算に符号付きの型を使用する