Partilhar via


Aviso do compilador (nível 4) C4463

transbordamento; atribuindo valor ao campo de bits que só pode conter valores de low_value a high_value

Observações

O valor atribuído está fora do intervalo de valores que o campo de bits pode conter. Os tipos de campo de bits assinados usam o bit de alta ordem para o sinal, portanto, se n for o tamanho do campo de bits, o intervalo para campos de bits assinados é -2n-1 a 2n-1-1, enquanto os campos de bits não assinados têm um intervalo de 0 a 2n-1.

Example

Este exemplo gera C4463 porque tenta atribuir um valor de 3 a um campo de bits do tipo int com um tamanho de 2, que tem um intervalo de -2 a 1.

Para corrigir esse problema, você pode alterar o valor atribuído para algo no intervalo permitido. Se o campo de bits se destinar a manter valores não assinados no intervalo de 0 a 3, você poderá alterar o tipo de declaração para unsigned. Se o campo se destinar a manter valores no intervalo -4 a 3, então você pode alterar o tamanho do campo de bits para 3.

// C4463_overflow.cpp
// compile with: cl /W4 /EHsc C4463_overflow.cpp
struct S {
    int x : 2; // int type treats high-order bit as sign
};

int main() {
    S s;
    s.x = 3; // warning C4463: overflow; assigning 3
    // to bit-field that can only hold values from -2 to 1
    // To fix, change assigned value to fit in range,
    // increase size of bitfield, and/or change base type
    // to unsigned.
}