Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
przepełnienie; przypisywanie wartości do pola bitowego, które może przechowywać tylko wartości z low_value do high_value
Przypisana wartość znajduje się poza zakresem wartości, które może przechowywać pole bitowe. Podpisane typy pól bitowych używają bitu o wysokiej kolejności dla znaku, więc jeśli n jest rozmiarem pola bitowego, zakres podpisanych pól bitowych to -2 n-1 do 2n-1-1, podczas gdy niepodpisane pola bitowe mają zakres od 0 do 2n-1.
Przykład
Ten przykład generuje C4463, ponieważ próbuje przypisać wartość 3 do pola bitowego typu int
o rozmiarze 2, który ma zakres od -2 do 1.
Aby rozwiązać ten problem, możesz zmienić przypisaną wartość na coś w dozwolonym zakresie. Jeśli pole bitowe ma przechowywać niepodpisane wartości w zakresie od 0 do 3, można zmienić typ deklaracji na unsigned
. Jeśli pole ma przechowywać wartości w zakresie od -4 do 3, można zmienić rozmiar pola bitowego na 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.
}