Jestem bardzo nowe do czynienia z bitów i nie utknął na następujące ostrzeżenie przy kompilacji:ostrzegawcza: lewy shift count> = szerokość typu
7: warning: left shift count >= width of type
Moja linia 7 wygląda tak
unsigned long int x = 1 << 32;
byłoby to sensowne, gdy wielkość long
w moim systemie był 32 bity. Jednak sizeof(long)
zwraca 8
i CHAR_BIT
jest zdefiniowany jako 8
sugerując, że długi powinien być 8x8 = 64-bitowy.
Czego mi tu brakuje? Czy sizeof
i CHAR_BIT
są niedokładne lub czy źle zrozumiałem coś fundamentalnego?
Czy 'unsigned long x = 1; x << = 32; 'praca, w interesie? –
@Kolink: Tak, miałoby to ten sam efekt, co "unsigned long" 1 << 32' Lewy operand po prostu musi być 'unsigned long'. Sufiks "UL" jest najprostszym sposobem na osiągnięcie tego. –
@ James McNellis: Jakie są problemy z * _left__ przesuwaniem liczby całkowitej ze znakiem *? Wiem tylko, że *** prawo *** przesuwanie liczby całkowitej ze znakiem może prowadzić do różnych wyników z różnymi kompilatorami. – pynexj