警告 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:对算术使用带符号类型