Jest to wątpliwość co do reprezentacji bitów liczb całkowitych ze znakiem. Na przykład, jeśli chcesz reprezentować -1, jest to równoważne uzupełnieniu 2 (+1). Więc -1 jest reprezentowane jako 0xFFFFFFF. Teraz, kiedy przesuwam liczbę o 31 i drukuję wynik, wraca on jako -1.Liczba bitów reprezentujących liczby ujemne
signed int a = -1;
printf(("The number is %d ",(a>>31));//this prints as -1
Czy ktoś może mi wyjaśnić, w jaki sposób bity są reprezentowane dla liczb ujemnych?
Dzięki.
Patrząc na to z innej strony: myśl o dowolnej zmianie N-bitowej (wydłużającej znak) jako dzielącej przez 2^N, zaokrąglając W DÓŁ (w kierunku minus nieskończoności, a nie w kierunku 0.) Stąd -1 przesunięte w prawo (ze znakiem rozszerzenie) dowolną liczbę razy będzie produkować -1. – vladr