В C ++ любой тип без знака оборачивается, когда вы достигаете потолка [1].Когда вы определяете битовое поле из 4 битов, то каждое значение, которое вы сохраняете, также оборачивается.Возможные значения для битового поля размера 4 - 0-15.Если вы сохраняете «17», то переходите к «1», для «18» вы переходите еще на «2».
Математически, обернутое значение является исходным значением по модулю возможные значения для типа назначения:
для битового поля размера 4 (2 ** 4 возможных значения):
18 % 16 == 2
17 % 16 == 1
для битового поля размера 3 (2 **3 возможных значения):
8 % 8 == 0.
[1] Это не относится к типам со знаком , когда неизвестно, что произойдет.