2¹⁶-1 i 2⁵ = 2⁵ (lub? Oczywiście?)
Deweloper zapytał mnie dzisiaj, co to jest bitowe 65535 i 32, tj. 2¹⁶-1 i 2⁵ =? Początkowo myślałem spontanicznie 32, ale wydawało mi się to łatwe, po czym myślałem przez kilka minut, a potem odpowiedziałem 32. 32 wydaje się być prawidłową odpowiedzią, ale jak? 65535 = 2¹⁶-1 = 1111111111111111 (ale to nie wydaje się słuszne, ponieważ wszystkie te liczby binarne powinny wynosić -1 (?)), 32 = 100000, ale nie mogłem przekonwertować tego w mojej głowie, po czym i tak odpowiedziałem 32, ponieważ miałem odpowiedzieć na coś. Czy odpowiedź 32 jest w rzeczywistości trywialna? Czy w ten sam sposób 2¹⁶-1 i 2⁵-1 = 31? Dlaczego deweloper zapytał mnie o dokładnie 65535?
Binarne, o co poproszono mnie do oceny, to 1111111111111111 i 100000, ale nie rozumiem, dlaczego 1111111111111111 nie jest -1. Czy nie powinno być -1? Czy 65535 to liczba powodująca przepełnienie i skąd mam to wiedzieć?
Odpowiedzi:
W tym przypadku liczba jest traktowana jako liczba całkowita bez znaku, co oznacza, że wszystkie ustawione bity nie będą dawały -1 (gdyby były podpisane, to tak, byłbyś poprawny). Wszystkie 16 bitów da ci 65535.
Co ciekawe, stan podpisany nie jest czynnikiem przy logicznych operacjach bitowych. Same bity nie są podpisane, ponieważ są najniższym składnikiem komputera. Jest to określone przez procesor, jeśli bity w ex. rejestr będzie traktowany jako podpisany lub niepodpisany.
Liczby ujemne są tworzone przez ustawienie najbardziej znaczącego bitu (MSB) na true, jeśli liczba jest traktowana jako znak (która „strona” lub który bit zewnętrzny zostanie ustawiony, różni się w zależności od architektury procesora, tj. Big-endian / little-endian ).
źródło
To jest banalne. 65535 w formacie binarnym to wszystko, więc ORAZ z każdym X mniejszym niż 65535 da ci X.
źródło
Odpowiadając na drugą część pytania. Oznaczono to jako32-bitowywięc 65535 w 32 bitach jest
00000000000000001111111111111111
, podpisane lub niepodpisane, to nie jest -1.źródło