Czy jest coś wyjątkowego w numerze 65535?

11

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ć?

Niklas
źródło
3
Musi być coś wyjątkowego. Przypomina mi 56 6635, czeski krajowy standard piwa. Hmmmm ... czas na piwo.
joshp
5
Robisz zbyt wiele przypuszczeń: 65535 daje -1 tylko w arytmetyce dopełniacza 16-bitowych dwóch. Daje to -0 w arytmetyki dopełniacza 16-bitowego i 65535 w 32-bitowej dopełniaczu dwóch i arytmetyki jednego dopełniacza.
mouviciel
3
Jest to górna granica portów TCP.
Renae Lider

Odpowiedzi:

23

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 ).

epistemex
źródło
9
Większość nowoczesnych maszyn przekształca się w ujemne, odwracając bity i dodając dopełnienie jeden: 2. Już ustawienie jednego bitu daje problem z +0 i -0.
James
1
To niekoniecznie problem. Uzupełnienie 1 skraca się do zera, niezależnie od znaku wyniku. Uzupełnienie 2 skraca się w kierunku-nieskończoności. W niektórych aplikacjach może to spowodować problemy.
John R. Strohm,
18

To jest banalne. 65535 w formacie binarnym to wszystko, więc ORAZ z każdym X mniejszym niż 65535 da ci X.

ggambett
źródło
10

Odpowiadając na drugą część pytania. Oznaczono to jakowięc 65535 w 32 bitach jest 00000000000000001111111111111111, podpisane lub niepodpisane, to nie jest -1.

Chris Kent
źródło