Aviso C26452

Estouro aritmético: a contagem de deslocamento à esquerda é negativa ou maior ou igual ao tamanho do operando, que é um comportamento indefinido (io.3)

Comentários

Esse aviso indica que a contagem de deslocamento é negativa ou maior ou igual ao número de bits no operando deslocado. Ambos os casos resultam em comportamento indefinido.

O aviso C4293 é uma verificação semelhante no compilador do Microsoft C++.

Nome da análise de código: SHIFT_COUNT_NEGATIVE_OR_TOO_BIG

Exemplo

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

Para corrigir esse aviso, use o seguinte código:

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

Confira também

C26450
C26451
C26453
C26454
ES.101: Usar tipos não assinados para manipulação de bits
ES.102: usar tipos assinados para aritmética