Hat die Nummer 65535 etwas Besonderes?

10

2¹⁶-1 & 2⁵ = 2⁵ (oder? Offensichtlich?)

Ein Entwickler hat mich heute gefragt, was bitweise 65535 & 32 ist, dh 2¹⁶-1 & 2⁵ =? Ich dachte zuerst spontan 32, aber es schien zu einfach, woraufhin ich einige Minuten nachdachte und dann 32 antwortete. 32 scheint die richtige Antwort gewesen zu sein, aber wie? 65535 = 2¹⁶-1 = 1111111111111111 (aber es scheint nicht richtig zu sein, da diese Binärzahl alle -1 (?) Sein sollte), 32 = 100000, aber ich konnte das in meinem Kopf nicht konvertieren, woraufhin ich ohnehin 32 antwortete, seit ich hatte etwas beantworten. Ist die Antwort 32 tatsächlich trivial? Ist in gleicher Weise 2¹⁶-1 & 2⁵-1 = 31? Warum hat mich der Entwickler nach genau 65535 gefragt?

Binär, was ich bewerten sollte, war 1111111111111111 & 100000, aber ich verstehe nicht, warum 1111111111111111 nicht -1 ist. Sollte es nicht -1 sein? Ist 65535 eine Zahl, die einen Überlauf verursacht, und woher weiß ich das?

Niklas
quelle
3
Es muss etwas Besonderes geben. Es erinnert mich an 56 6635, den tschechischen nationalen Standard für Bier. Hmmmm ... Zeit für ein Bier.
Joshp
5
Sie machen zu viele Annahmen: 65535 ergibt -1 nur in der 16-Bit-Zweierkomplementarithmetik. Es gibt -0 in der 16-Bit-Komplementarithmetik und 65535 in der 32-Bit-Zweierkomplement- und Komplementarithmetik.
Mouviciel
3
Dies ist die Obergrenze für TCP-Ports.
Renae Lider

Antworten:

22

Die Zahl wird in diesem Fall als vorzeichenlose Ganzzahl behandelt, was bedeutet, dass nicht alle gesetzten Bits -1 ergeben (wenn sie vorzeichenbehaftet wären, wären Sie korrekt). Alle 16 gesetzten Bits ergeben also 65535.

Interessanterweise spielt der vorzeichenbehaftete Zustand bei logischen Bitoperationen keine Rolle. Bits sind selbst nicht signiert, da sie die niedrigste Komponente in einem Computer sind. Es wird durch die CPU-Operation angegeben, wenn die Bits in ex. Ein Register wird signiert oder nicht signiert behandelt.

Negative Zahlen werden erzeugt, indem das höchstwertige Bit (MSB) auf wahr gesetzt wird, wenn die Zahl als vorzeichenbehaftet behandelt wird (welche "Seite" oder welches äußere Bit gesetzt wird, hängt von der CPU-Architektur ab, dh Big-Endian / Little-Endian ).

Epistemex
quelle
9
Die meisten modernen Maschinen wandeln sich in Negative um, indem sie die Bits umdrehen und das 1: 2-Komplement hinzufügen. Wenn Sie nur ein Bit setzen, haben Sie das Problem, +0 und -0 zu haben.
James
1
Das ist nicht unbedingt ein Problem. Das Komplement von 1 wird unabhängig vom Ergebniszeichen gegen Null abgeschnitten. Das 2er-Komplement schneidet in Richtung -Infinity ab. In bestimmten Anwendungen kann dies zu Problemen führen.
John R. Strohm
18

Es ist trivial. 65535 in binär ist alles eins, also erhalten Sie X, wenn Sie es mit einem X kleiner als 65535 UND verknüpfen.

ggambett
quelle
10

Beantwortung des zweiten Teils Ihrer Frage. Sie haben es als markiert, also ist 65535 in 32 Bit 00000000000000001111111111111111signiert oder nicht signiert, es ist nicht -1.

Chris Kent
quelle