Warum ist 2 ^ 16 eine "spezielle" Zahl? [geschlossen]

48

OK, ich fühle mich dumm, das zu fragen - aber in Jeffs Artikel: Den Bildschirm des Interviewtelefons richtig machen und ursprünglich in den 5 wichtigsten Fragen zum Bildschirm des Telefons angegeben :

Sie sollten dich nicht verständnislos anstarren, wenn du mit 2 ^ 16 fragst. Es ist eine spezielle Nummer. Sie sollten es wissen.

Ich bin seit einiger Zeit Entwickler / Softwareentwickler / Code-Affe / was auch immer, und ich glaube nicht, dass ich jemals darauf gestoßen bin. Ich meine, ich kann mit Sicherheit Binärwerte zählen, die grundlegende Operationen ausführen, usw. usw. Aber ich sehe nicht, was an diesem Wert "besonders" ist.

javamonkey79
quelle
6
Es ist eine Potenz von 2? :)
Michael K
2
@Michael 2^16.1ist auch eine Potenz von 2, aber nichts Besonderes. Gleiches gilt für 2^0.
Rightfold
4
@Radek: 2**0ist 1, was in der Tat eine sehr spezielle Zahl ist;) Aber ja, wir beschäftigen uns im Allgemeinen nur mit Zweierpotenzen, bei denen der Exponent eine positive ganze Zahl ist.
1
Nun, warum ist 10 ^ 3 oder 10 ^ 6 eine spezielle Zahl?
4
Ist das eine Interviewfrage aus den 90ern? 16 Bits waren damals etwas Besonderes
Chris S

Antworten:

81

(2 16 - 1) oder 65535 oder 0xFFFFoder "64k" ist der Maximalwert von 2 Bytes. Lange Zeit verwendeten CPUs eine 16-Bit-Architektur und Betriebssysteme basierten ebenfalls auf 16-Bit-Operationen und "Worten" . Es gab 16-Bit-Befehle und 16-Bit-Speicheradressen. Viele Systeme / Compiler verwenden immer noch 16 Bit für Ganzzahlen.

(2 16 - 1) ist also etwas Besonderes, da es die größte Zahl ist, die eine 16-Bit-Ganzzahl (ohne Vorzeichen) enthalten kann, und die größte Speicheradresse, auf die eine 16-Bit-Architektur zugreifen kann.

Travis Christian
quelle
23
Zu Ihrer Information, es ist auch die Anzahl der Zeilen in einer Excel-Tabelle :)
Travis Christian
2
Ist das noch die Grenze?
JeffO
6
Ich stehe korrigiert. Vielleicht ist es eine Weile her, dass ich den ganzen Weg nach unten gescrollt habe.
Travis Christian
3
@ Travis: Der letzte Satz enthält einen Fehler von eins zu eins. 2 ^ 16 benötigt 17 Bits.
PSU
2
65535 ist auch die höchste in IPv4- (und IPv6-?) Protokollen gefundene Portnummer.
CoatedMoose
58

Aus dem ganzen Körper von Steve Yegges Artikel,

Kandidaten sollten wissen, was Bits und Bytes sind. Sie sollten in der Lage sein, binär zu zählen. zB sollten sie in der Lage sein zu sagen, was 2 ^ 5 oder 2 ^ 10 dezimal sind. Sie sollten dich nicht verständnislos anstarren, wenn du mit 2 ^ 16 fragst. Es ist eine spezielle Nummer. Sie sollten es wissen.

Ich wurde von dem Teil abgeworfen, den Sie in der Frage zitiert haben. Es klang, als ob ein Kandidat in der Lage sein sollte, seine Bedeutung zu beschreiben, aber im Zusammenhang sagt er, dass Kandidaten auf Anhieb wissen sollten, was die Dezimalumrechnung von 2 16 ist.

Die Bedeutung davon ist, dass wir Menschen immer noch Dezimalzahlen zum Zählen verwenden, insbesondere in unseren Köpfen (in den meisten Fällen), und daher die groben Kapazitäten der allgemeinen Byteblöcke kennen müssen, die wir zum Speichern, Speichern oder sogar zur Zeichencodierung verwenden. Da ein Byte aus 8 Bits besteht, sind 8, 16, 24, 32 und 64 die häufigsten.

Zum gegenwärtigen Zeitpunkt würde ich sagen, dass 2 32 die am häufigsten vorkommende Kapazität ist, mit der ein Entwickler umgeht. Ich bin misstrauisch gegenüber Entwicklern, die nicht wissen, dass 2 32 ungefähr 4 Milliarden sind (maximal 2 Milliarden, wenn signiert), da sie nie die Mühe gemacht haben, ungefähr herauszufinden, wie viele Datensätze in ihren Datenbanken gespeichert werden können Verwenden Sie 32-Bit- ints für Primärschlüssel, oder wenn alter Code, der 32-Bit- ints für IDs, Datumsangaben usw. verwendet, auf 64-Bit umgestaltet werden muss. 1

2 16 ist die Gesamtkapazität von Java short. (Gesamtzahl zwischen -2 15 und 2 15 -1)

Ein Entwickler sollte auswendig wissen, was 8-Bit ist. Unter den vielen gebräuchlichen Verwendungen ist die ASCII-Zeichencodierung.

Ich würde nicht erwarten, dass ein Programmierer 2 14 oder 2 18 überhaupt kennt , aber ich würde wahrscheinlich erwarten, dass er 2 16 kennt, da es sich um eine sehr häufig vorkommende Zahl handelt, die kurz genug ist (65536), um sich leicht an die vollständige Zahl zu erinnern.


1: Wenn Sie in den Bestenlisten von Call of Duty: MW2 oder iPhone Game Center stöbern, werden Sie häufig Betrüger mit einem Höchstwert von 2.147.483.647 (2 31 -1, der Höchstwert einer vorzeichenbehafteten 2 32- Ganzzahl) sehen.

Nicole
quelle
22
Gut zu wissen ist, dass 2 ^ 10 ungefähr eintausend ist und man von dort 2 ^ 20 eine Million und 2 ^ 30 eine Milliarde und so weiter erhält. Und mit Hilfe dessen ist es einigermaßen einfach zu "sehen", dass 2 ^ 14 16 Millionen ist, sodass Sie schnell gedankliche Umrechnungen zwischen Binär und Dezimal durchführen können. Und 2 ^ 64 ist 16 * 10 ^ 18, was hmm ... 16 Milliarden Milliarden ist :)
Maglob
@Maglob, danke, guter Punkt. Es ist erwähnenswert, wie Sie zu 2 ^ 64 gekommen sind, da ich eine Minute gebraucht habe. 1000 ist 10 ^ 3, was ungefähr 2 ^ 10 entspricht. 64 ist 4 und 60. 60/10 ist 6, 6 * 3 ist 18, also erhalten Sie: 10 ^ 18 * (2 ^ 4 oder 16) ...
Nicole
2
Uuh. Ich habe einen Tippfehler oben (und irgendwie kann es nicht bearbeiten) 2 ^ 14 sind natürlich sechzehn tausend , nicht Millionen. (Ich denke, es war doch nicht so einfach zu "sehen" :)
Maglob
+1 Gute Antwort, denn ein vollständigerer Kontext besteht darin, dass Sie nach einer Person suchen, die denken kann und insbesondere Kenntnisse über den Kontext und den Bereich besitzt.
quick_now
4
Ähm, ASCII ist 7-Bit .. ;-)
Brendan
3

Der einzige Grund, warum ich 2 16 als "speziell" betrachte, ist, dass es mehr als die höchste Ganzzahl ist, die Sie in einem einzelnen Register eines 16-Bit-Betriebssystems speichern können.

In ähnlicher Weise könnten Sie dieselbe Logik auf 2 32- und 32-Bit-Betriebssysteme anwenden .

Ich müsste mehr Kontext für die Frage wissen, bevor ich sagen kann, ob es sich um ein signifikantes Stück Wissen handelt oder nicht.

ChrisF
quelle
Ich schwöre, ich muss das meiste von dem herausgefiltert haben, was du geschrieben hast. Ich sah nur 2 ^ 16 und die höchste ganze Zahl.
ChaosPandion
6
Das ist ungenau. Es ist durchaus möglich, in einem 16-Bit-Betriebssystem einen 32-Bit-Datentyp (oder höher) zu verwenden. Eine 16-Bit-Ganzzahl ist einfach der größte Wert, der in einem einzelnen Register auf einem 16-Bit-Prozessor gespeichert werden kann.
Chinmay Kanchi
@ Chinmay - Punkt genommen;)
ChrisF