Uwaga poniżej zestawienie wewnątrz struct:
int Bit1: 1; -> 'int' wskazuje , że jest to ZAPISANA liczba całkowita. W przypadku liczb całkowitych ze znakiem, lewy lewy bit zostanie użyty dla znaku +/-. Jeśli przechowujesz pole 1-bitowe: Lewy skrajny bit to 1, więc system traktuje wartość jako liczbę ujemną .
Metoda uzupełniania dwójki to używana przez system do obsługi ujemnych wartości .
Dlatego przechowywane dane to 1. Uzupełnienie 2 do 1 to także 1 (ujemne).
Dlatego drukowane jest -1.
Jeśli przechowujesz 2 w 4-bity pola: binarne 2: 0010 (od lewej najbardziej bit jest 0, więc system będzie traktować jako wartość dodatnia) 0010 wynosi 2 Dlatego 2 zostanie wydrukowany.
Wygląda jak zadanie domowe. – spidey
To jest implementacja zdefiniowana, czy 'int' bit-pola są' signed int' lub 'unsigned int'. W niektórych kompilatorach można uzyskać "1 2 2" jako wynik. Dla przenośności powinieneś użyć 'unsigned int' lub' signed int' dla pól bitowych. Lub nie używaj pól bitowych. – ouah