Warum hexadezimal lernen? [geschlossen]


28

Ich habe an einigen Einführungskursen für Programmierer teilgenommen, hauptsächlich, um meine Füße in jeder Art von Programmierung nass zu machen, die ich finde. Es überrascht nicht, dass fast jede Klasse dasselbe Format durchläuft: Einführung in die Hardware, Einführung in die Software, und dann beginnt die eigentliche Programmierung. Obwohl es sehr wichtig ist, die Funktionsweise von Hardware und Software zu verstehen, war ich immer verwirrt über ein Thema, das in jedem einzelnen Kurs behandelt wurde.

In der Einführung zu Software habe ich festgestellt, dass sie immer großen Wert darauf legen, in binären, hexadezimalen und manchmal sogar in oktalen Zahlensystemen zu schreiben. Ich verstehe, dass es gut ist zu verstehen, was diese Dinge sind und wie ein Computer sie interpretieren würde, aber ich musste nie wirklich wissen, wie man eines dieser Zahlensysteme liest und schreibt. Wirklich, das einzige Mal, dass ich etwas anderes als Base 10 gesehen habe, sind Farben in CSS, was noch einfacher ist, wenn Sie so etwas wie www.colorpicker.com verwenden

Habe ich die wundervollen Verwendungen dieser Nicht-Basis-10-Zahlensysteme in der Programmierwelt einfach nicht gekannt, oder ist es nur eine alte Tradition, diese Abschnitte in alle Programmierlehrbücher aufzunehmen? Hat jemand ein gutes Beispiel dafür, wo der durchschnittliche Programmierer tatsächlich eine Oktalzahl verwenden würde?


1
Hat jemand ein gutes Beispiel dafür, wo der durchschnittliche Programmierer tatsächlich eine Oktalzahl verwenden würde? Ja, wenn Sie jemals Software für die Luftfahrtindustrie schreiben, werden Sie wahrscheinlich auf Transpondercodes stoßen, die eine 4-stellige Oktalzahl sind. en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

Antworten:


14

Alle Antworten sind gut, aber sie sprechen nicht das an, was ich für den wertvollsten Teil halte. Wenn Sie lernen, in verschiedenen Grundlagen zu denken, können Sie die Art und Weise, wie Computer mit Zahlen umgehen, viel besser beherrschen.

Wenn Sie eine Reihe von Kleinbuchstaben ordentlich verpackt aufbewahren möchten, wie würden Sie das tun?

Nun, es gibt 26 Kleinbuchstaben, die sich leicht in einen Bereich von 0 bis 31 übersetzen lassen. Dies ist eine 5-Bit-Zahl. Sie können 6 5-Bit-Zahlen in ein 32-Bit-Feld (int?) Packen und haben sogar genug übrig für ein paar Satzzeichen.

Ich sage nicht, dass Hex bei solchen Dingen hilft, aber ich verstehe, wie Zahlen konvertieren.

In einem anderen Fall verwenden Sie von Zeit zu Zeit base-64, um etwas lange Zahlen in ASCII zu übergeben. Würdest du wissen, wie man das umsetzt? Warum so implementieren? Wusstest du überhaupt, dass du das jedes Mal eingetippt hast, wenn du den "CD-SCHLÜSSEL" in die Registrierungsbox eines Spiels eingetippt hast?

Spielen Sie auch zum Spaß eine Weile mit Base 12 herum. Mathematik stellt sich in Basis 12 als sehr interessant heraus (Basis 10 ist im Vergleich dumm, ich wünschte, wir hätten uns mit 6 Fingern weiterentwickelt - wir könnten in Bezug auf Mathematik um Jahrzehnte voraus sein). Einige sehr kluge frühe Menschen verwendeten die Basis 12, um die Uhr zu entwickeln.

In Basis 10 haben wir 3 "Cool" -Nummern, die einfache Muster erzeugen, 2, 5 und 9 mit 8, 6 und 4 als "Minor" Cool-Nummern. In Basis 12 haben Sie 2,3,4,6,11 als "Cool" -Zahlen mit 8,9 und 10 als "Minor" -Zahlen, was bedeutet, dass wir mit Basis 12 Muster in Zahlen viel besser erkennen können weil wir sie die ganze Zeit sehen würden.

Auch binär. Sie können auf einer Hand bis 32 zählen - ich mache das ziemlich oft, ist manchmal nützlich, wenn das Zählen bis 5 einfach nicht funktioniert :)

Binär ist eine Menge Spaß, aber es ist einfach nicht gut zu übersetzen. Wenn Sie mit Hex gut werden, sehen Sie "A" als 1010 und "5" als 0101, und diese Dinge beginnen wirklich wichtig zu sein. Wenn Sie ein Bitfeld haben, aus dem Sie das 6. Bit extrahieren möchten: 00100000, womit "und" gehen Sie vor? Sie sollten nur wissen, dass es 0x20 ist.

Wenn du Code siehst, der etwas mit 0x0600 hat, welche Bits werden extrahiert? Sie sollten es wissen, ohne darüber nachzudenken - Sie sollten es tatsächlich so lesen, als ob es 0000011000000000 geschrieben wäre (aber einfacher zu lesen, weil Sie keine Nullen zählen müssen).

Warum sollten Sie Ihr Gehirn und seine Fähigkeit zur Datenverarbeitung einschränken?


Tatsächlich wurden Uhren in base60 entwickelt .
Denis de Bernardy

@Denis Ich hatte den Eindruck, dass die derzeitige Theorie besagt, dass sie von Leuten entwickelt wurden, die auf Basis von zwölf gezählt wurden und die gegen dümmeren Menschen verloren haben, die nicht glauben konnten, dass sie ihre Finger weitergegeben haben. 60 ist nur die 12 Divisionen weiter in Gruppen von 5 unterteilt und scheint ein After-Hack von der Basis 10 Grunzen :)
Bill K

Könnte sein. Ehrlich gesagt bin ich kein Spezialist. Ihr Kommentar brachte nur eine lange vergessene Erinnerung zurück. Ich erinnere mich auch, dass in 360 Grad gemessene Winkel von der Basis 60 stammen (und zwar von denselben babylonischen Erfindern), aber wie Sie betonen, kann es sein, dass das Grunzen der Basis 10 nur das überwältigte, was ursprünglich Mathematiker der Basis 12 waren. :-) Nun stellen Sie sich vor, wir würden in der Basis 20 zählen, wie es einige Indianer taten. :-D
Denis de Bernardy

44

Was gibt es zu lernen? Um ein kompetenter Programmierer zu sein, müssen Sie verschiedene Zahlenbasen verstehen , aber in Bezug auf Hex gibt es wenig zu lernen, außer dass ABCDEF nach 9 kommt.


8
OP kann sich auf die Fähigkeit beziehen, mental von anderen Basen zur Basis 10 zu transponieren. Dies mag zu einem bestimmten Zeitpunkt eine nützliche Fähigkeit gewesen sein und für eine bestimmte Kategorie von Low-Level-Programmierern immer noch von Bedeutung sein, ist aber heute weitgehend irrelevant. Sie können die Konvertierung zum Beispiel in vim trivial durchführen.
Rein Henrichs

Das ist richtig. Ich hätte klarer sein sollen.
jwegner

2
@Rein Ich war noch nie so gut darin (ich muss in meinem Kopf rechnen), also kann ich nicht sagen. Ich war jedoch geistig in der Lage, von hexadezimal in die Assemblersprache Z80 zu übersetzen, was zu dieser Zeit eine nützliche Sache war. Ich vermute, dass die Fähigkeit, von Hex auf 80x86 Assembler (oder was auch immer) zu transponieren, für Programmierer, die heute arbeiten, immer noch nützlich ist.
Neil Butterworth

1
@Neil Butterworth: 8080 Opcodes sind in oktaler Hinsicht sinnvoller, wenn sie zur Erinnerung dienen. Mein Gedächtnis ist wirklich unklar darüber, wie das auf die Z80-Erweiterungen angewendet wurde.
David Thornley

1
@Neil: Ich denke, der wesentliche Teil waren die Anweisungen zum Verschieben von Registern zu Registern, die im Bitformat 01xxxyyy zu sein scheinen, wobei xxx das Ziel und yyy die Quelle ist. Ich weiß nicht, ob es eine andere oktale Bedeutung gibt.
David Thornley

18

Hat jemand ein gutes Beispiel dafür, wo der durchschnittliche Programmierer tatsächlich eine Oktalzahl verwenden würde?

Oktal? Nicht generell, nein, mit Ausnahme von * nix-Berechtigungen.

Hexadezimal? Wetten Sie? Sie ignorieren die ziemlich große Anzahl von uns, die Bits um eingebettete Systeme herum mischen und sich Protokolle oder Dateiformate auf Bit-Ebene usw. ansehen. Aber sicher, wenn Sie bei der Arbeit mit Anwendungen oder im Internet nicht auf dem neuesten Stand sind, werden Sie möglicherweise leichter davonkommen.

Beispiel: Konfigurationsregister auf Mikrocontrollern und dergleichen.

Nehmen Sie die Nummer 54312, die Sie durch zufälliges Drücken der Tasten erhalten. Kannst du sagen, welche Bits gesetzt sind? Ich kann nicht, zumindest nicht von oben. Das hexadezimale Äquivalent ist dann 0xd428. DasAuf der anderen Seite wird mir sofort mitgeteilt, dass das Bitmuster, das ich betrachte, 1101 0100 0010 1000 ist. Es ist logischer für diese Art von Dingen aufgebaut, und Sie müssen dies die ganze Zeit tun, wenn Sie sich dem nähern Metall. Angenommen, die obige Zahl ist die, die ich beim Zurücksetzen von der MCU erhalte, und die Bits 7 und 9 müssen aus irgendeinem Grund gesetzt werden. In hex kann ich leicht erkennen, dass die resultierende Zahl 0xd6a8 sein sollte, aber in dezimal? Das ist 54952, bei weitem nicht so intuitiv, wenn Sie mich fragen. Sicher, es geht darum, den Wert um 640 zu erhöhen, aber es ist ein größerer Aufwand, dies herauszufinden. Natürlich kann man in der Praxis einfach die Bits an die richtige Position verschieben und diese mit dem ursprünglichen Wert ODER verknüpfen, aber Sie möchten möglicherweise trotzdem wissen, wie die endgültige Darstellung lautet.


1
Welche Art von Aufforderung gibt die Frage "Warum sollte es mich interessieren, welche Bits gesetzt sind?" Für einige (viele? Die meisten?) Anwendungen ist dies nicht relevant.
Neil Butterworth

10
Einverstanden - vorausgesetzt, es handelt sich um eine Entwicklung auf hohem Niveau. Niedriger Pegel, ob ein bestimmtes Bit gesetzt oder gelöscht ist, kann nicht einfach sein, sondern bestimmt manchmal, ob das blutige Mikro überhaupt startet oder ob ein bestimmtes Peripheriegerät, das Sie benötigen, mit Strom versorgt wird oder mit einer Taktrate von x statt y läuft . Das ist erst der Anfang, und wenn Sie sich mit dieser Art von Entwicklung befassen, sind im Grunde einzelne Bits wichtig. Manchmal viel. Aber auch hier kommt es auf Ihre Domain an, sage ich nur; Vergiss die eingebettete Welt nicht. =)
n42

1
+1 - je näher Sie der Maschine kommen, desto mehr benötigen Sie, um verschiedene Basen zu verwenden. Es ist nicht nur eingebettet; Die meisten Sprachen haben Bit-Flags und sind aus offensichtlichen Gründen oft hexadezimal geschrieben. Umgekehrt ist es ziemlich sinnlos, in einem ersten Programmierkurs zu unterrichten, aber dann sind die meisten ersten Programmierkurse ziemlich sinnlos. Fast alle Programmierer unterrichten sich selbst richtig?

1
@Davor: Das liegt daran, dass Hex leichter zu lesen ist. Ich kann einen 8-stelligen Hex-Wert viel schneller verstehen als einen 32-stelligen Binärwert.
Steve S

2
@Steve S: Ehrlich gesagt, ich vermute, es liegt daran, dass wir auch ein fauler Haufen sind. 0x80 ist kürzer als 0b10000000. Aber ich stimme zu. Ich würde auch zustimmen, dass es in einem ersten Programmierkurs größtenteils bedeutungslos ist, aber Sie könnten es in diskrete Mathematik, Echtzeitprogrammierung, Computerorganisation und dergleichen umwandeln.
n42

12

Hat jemand ein gutes Beispiel dafür, wo der durchschnittliche Programmierer tatsächlich eine Oktalzahl verwenden würde?

Wenn Sie Berechtigungen für eine Datei in Unix (oder Linux) festlegen, verwenden Sie eine dreistellige Oktalzahl. Die erste Ziffer gibt die Berechtigungen des Benutzers an, die zweite die Berechtigungen der Gruppe und die letzte Ziffer die Berechtigungen, die alle anderen Benutzer erhalten.

Ich musste diese Tatsache im Code verstehen, den ich letzte Woche geschrieben habe.

Wenn Sie sich die Ausgabe von Standard-Hashing-Algorithmen wie MD5 ansehen, werden Sie diese häufig in hexadezimaler Schreibweise finden. Ich habe eine Reihe von Fällen gesehen, in denen dies zu Arithmetik auf ungewöhnlichen Grundlagen führte.

Wenn Sie verstehen möchten, wie Gleitkommazahlen intern dargestellt werden und warum 1/10 nicht genau dargestellt wird, müssen Sie unbedingt wissen, wie man Arithmetik auf verschiedenen Grundlagen ausführt. Dies ist esoterisches Wissen bis zu dem Tag, an dem es Sie in den Hintern beißt und Sie es plötzlich wirklich in Eile verstehen müssen.

Und es gibt eine Menge anderer Fälle, in denen die fundamentale Binärität von Daten in Computern auftaucht. Natürlich, wenn Sie nur eine CRUD-Website schreiben, werden Sie wahrscheinlich nie auf eine davon stoßen, da dies auf Ebenen geschieht, mit denen sich bereits jemand anders befasst hat.


4
* nix Berechtigungen sind nicht echt oktal. Mit diesen Darstellungen führen Sie keine mathematischen Berechnungen durch. Bestenfalls handelt es sich um oktale Darstellungen einer Binärmaske.
Joel Etherton

@Joel Etherton: Wenn Sie die Berechtigungen von einem Dateistat erhalten, werden sie als Zahlen angezeigt, die standardmäßig in Basis 10 angezeigt werden. Wenn Sie nicht verstehen, in / von Oktal zu konvertieren, sind diese Zahlen schwer zu verstehen. Ich schrieb Dokumentation, die diese Tatsache erklären musste. Es gab viele mathematische Berechnungen.
btilly

@btilly: Du verstehst falsch, was ich sage. Wenn Sie die Berechtigungen für eine Datei auf 755 setzen, müssen Sie diese zu nichts hinzufügen. Es ist nur eine Maske, die die Berechtigungskombinationen beschreibt. Natürlich muss man erkennen, dass dies (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1) bedeutet, aber dies sind immer noch nur Darstellungen der Binärmaske. Worauf beziehen Sie sich, wenn Sie "file stat" sagen? Ich habe noch nie eine Dateistatistik für Berechtigungen gesehen, die in Basis 10 bereitgestellt wurden (wobei ich mich strikt an dieses Beispiel halte).
Joel Etherton

1
@Joel Etherton: Versuchen Sie, perl -le '@stat = stat(shift); print $stat[2]' some_fileund Sie erhalten eine Statistik als Zahl in Basis 10. Sie müssen sie chmodauf die gleiche Weise an Perl übergeben . Daher ist es sinnvoll, die Nummer auf diese Weise in einer Datenbank zu speichern. An diesem Punkt muss dokumentiert werden, was diese Nummern mit vertrauten Unix-Berechtigungen zu tun haben. Wie gesagt, dies war kein hypothetisches Beispiel.
btilly

@Joel Etherton: Angenommen, Sie haben eine Datei mit 419 Berechtigungen (dezimal). Sie möchten die Datei für den Benutzer ausführbar, aber nicht für die ganze Welt lesbar machen. Wie müssen Sie die Nummer ändern? Der im C stat () -Aufruf zurückgegebene Wert ist ein int, und die Art und Weise, wie Sie drucken, ist eine andere Sache.
Vatine

9

Hoffentlich werden Sie in der realen Welt beim Konvertieren von Hex zu Binär zu Dezimal nicht befragt. Ihnen stehen Werkzeuge zur Verfügung, mit denen Sie nach Belieben konvertieren können.

Ich bin damit einverstanden, dass Sie verstehen, was los ist, aber warum auswendig lernen, wenn Sie es nachschlagen können?

Es hat sich jedoch als nützlich erwiesen, sich Schlüsselnummern zu merken (für mich 0x64 = 100, 0xFF = 255, 0xFFFF = 65535 usw.), da sie häufig vorkommen.

Könnte ich rasseln, was 8675309 in binär, hex und oktal ist? Nein, aber ich kann ein Tool öffnen, das es kann, wenn ich muss.


3
Sie haben 57005 vergessen, das üblicherweise als constelvis = 57005;
Bevan am

5

Das einzige, wofür ich jemals octal verwendet habe, sind Dateiberechtigungen auf Unix-Systemen.

Hex und Binär sind sehr nützlich, wenn Sie in der Nähe der Drahtprotokolle oder in der Nähe der Metalldatenübertragung arbeiten. Grundsätzlich fließen die Daten in binären Formaten, die trivial als hexadezimales Halbbyte dargestellt werden.

Sie werden auch feststellen, dass Datenblätter häufig hexadezimale Werte angeben, sodass es besser ist, den Wert im Code so anzuzeigen, wie er im Datenblatt angezeigt wird.

Wenn Sie eine der beiden Methoden häufig verwenden, sind Sie am Ende ziemlich geschickt darin, in Ihrem Kopf in Dezimalzahlen umzuwandeln, zumindest für gemeinsame Werte.

Alles, was gesagt wurde; Ich vermute, dass der Schwerpunkt hauptsächlich auf der Geschichte liegt. Wie Sie sagen, gibt es viele Programmierer, die nur wenig anderes als Dezimalstellen benötigen.


5

Sie fragen sich eigentlich, warum Sie die Potenz von 2 Zahlenrepräsentationen lernen sollen?

Computer bestehen aus Schaltkreisen , durch die Stromkreise fließt Strom in zwei verschiedenen Pegeln, hoch und niedrig, um die beiden Pegel der Ströme darzustellen. Wir verwenden Binärziffern, da sie zwei Zustände haben können, entweder einen (hoch) oder null (niedrig).

Binärziffern bilden Muster . Wenn Sie und ich zum Beispiel nur über eine Leitung sprechen können, können wir feststellen, dass Sie mir das Binärmuster 1000001 senden, wenn Sie mir den Buchstaben A senden möchten. Da ich faul bin , Ich möchte mir die sieben Ziffern nicht merken. Vielmehr werde ich ein Potenz-2-Nummerierungssystem verwenden, um große Binärziffern in eine kleinere zu repräsentieren. Ich kann 8 (2 ^ 3) oder 16 (2 ^ 4) verwenden.

Wie Sie sehen können, verwenden die meisten Computerhardware- und -softwareprogramme eine binäre Darstellung, und wir Menschen verwenden Potenzen von 2 Darstellungen wie Oktal und Hexadezimal, um die binäre Darstellung effizienter und schmerzloser zu lesen.

Nun ein Beispiel für einen durchschnittlichen Programmierer, der die Potenz von 2 Darstellungen verstehen muss:

  1. ASCII
  2. Unicode
  3. Grundlegendes zur Speicherverwaltungsprogrammierung (Stack, Heap, Speicheradressen, Core Dumps)
  4. Debuggen
  5. Das Lesen von Binärdaten erfolgt hauptsächlich im Hex-Editor.

Jetzt, meine letzten beiden Cent, bin ich sehr zuversichtlich, dass Sie ziemlich schnell jede Potenz von 2 Darstellungen lernen können (da Sie bereits Intro-Programmierkurse verwaltet haben). Sie könnten die Konvertierung vergessen, aber es sollte kein Fremdwort sein, wenn Sie wollen ein durchschnittlicher Programmierer sein.


3

Ich habe noch nie octal verwendet, aber es ist nicht ungewöhnlich, hex im Debugger zu sehen, und gelegentlich ist es viel sinnvoller, hex im Quellcode zu verwenden (normalerweise, weil die zugrunde liegenden Daten Bit-Flags sind).


3

Ich weiß nicht, ob es heutzutage einen großen Bedarf gibt, aber vor vielen Jahren, als ich ein Systemprogrammierer war, war es unerlässlich, hex lesen und verstehen zu können. Mir würde ein Speicherabbild (alles in hex) präsentiert und die hexadezimale Darstellung wieder in die IBM Assembly-Sprache dekodiert. Nachdem Sie dies für eine Weile getan haben, können Sie es direkt tun - lesen Sie das Hex und schreiben Sie das entsprechende Assembly. Sehr praktisch zum Debuggen. Das Addieren und Subtrahieren von Hex-Werten war nützlich, um Offsets von Basisregistern zu berechnen.

Ich vermute, dass es in der Praxis derzeit wenig Bedarf gibt, aber das Wissen darüber kann kaum eine schlechte Sache sein.


Dort habe ich auch meine Hex-Fertigkeiten erworben. Später, als ich gezwungen war, Code ohne symbolischen Debugger auf VAX / VMS zu debuggen (wir haben Code an Kunden ohne symbolische Informationen verschickt). Heutzutage verwende ich es selten, obwohl wir einige Informationen in bestimmten URLs in hexadezimaler Schreibweise kodieren. Hin und wieder ist es hilfreich, sie im laufenden Betrieb dekodieren zu können.
TomG

3

Es geht nicht darum, binär / hexadezimal "fließend" zu lesen, sondern es ist bequem genug, dass Sie schnell eine mentale Umwandlung durchführen können, wenn Sie ihnen begegnen. Stellen Sie sich vor, Sie programmieren, ohne mit einfacher Arithmetik vertraut zu sein, und mussten jedes Mal, wenn Sie mit zwei multiplizieren mussten, zu einem Taschenrechner gehen.

Hexadezimal / Binär ist wichtig, da dies die Sprache ist, in der Computer sprechen. Sie werden sie ausnahmslos an bestimmten Orten antreffen, insbesondere wenn Sie Debugging-Übungen durchführen und Ihre Daten in hexadezimaler Form vorliegen.

Ich möchte auch betonen, wie wichtig es ist, die Basis 2 im Zusammenhang mit der internen Darstellung verschiedener numerischer Typen und der Funktionsweise der Arithmetik zu verstehen. Auf diese Weise haben Sie einen besseren Überblick darüber, wann und wie Sie beispielsweise mit Gleitkomma-Rundungsproblemen und Integer-Überläufen umgehen können.

Als ein weiteres Beispiel sind bitweise Operationen und Bit-Flags beim Programmieren immer noch weit verbreitet, und dies ist ein weiterer Ort, an dem ein Verständnis der Basis 2 wichtig ist.


2

Wirklich, das einzige Mal, dass ich etwas anderes als Basis 10 gesehen habe, ist für Farben in CSS,

Sie mussten noch nie ein Zeichen in den Unicode-Codetabellen nachschlagen ? Noch nie eine URL gesehen, die %20sie enthält? Noch nie eine GUID benutzt ? Noch nie eine IPv6-Adresse gesehen ? BLOBHaben Sie in SQL noch nie ein Literal geschrieben? Sie haben noch nie eine Datei in einem Hex-Editor gesehen? Es gibt viele Computer-bezogene Dinge, die herkömmlicherweise in hexadezimaler Schreibweise geschrieben sind.

Was Octal angeht, ist es heutzutage selten, wird aber immer noch für Unix-Dateisystemberechtigungen verwendet.

Siehe auch: Praktische Anwendungen von bitweisen Operationen

Auch wenn Sie es vermeiden können, jemals "drahtgebunden" zu programmieren, ist es aus einem einfachen Grund wichtig, sich der Tatsache bewusst zu sein, dass Computer im Binärmodus arbeiten: Abstraktionslecks .

Die intAbstraktion in den meisten Sprachen verliert ihre feste Breite. Ganzzahlen laufen über, und zwar bei "runden" Binärzahlen wie 2 31 . Ein Denker, der nur an Dezimalstellen denkt, wäre nicht in der Lage, den Fehler des Jahres 2038 zu erklären .

Die float/ doubleAbstraktion verliert ihren Radix von 2. Wenn Sie schreiben 0.1, erhalten Sie wirklich 0.1000000000000000055511151231257827021181583404541015625. Und Sie werden Fehler bekommen, wenn Sie genau 0.1 erwartet haben.


2

Das Erkennen bestimmter Zahlen, deren Muster in anderen Basen einfach sind, ist oft ein großer Hinweis beim Lösen von Fehlern. Wenn Ihre Antwort um 347 falsch ist, bedeutet das vielleicht nichts, aber wenn sie um 256 oder 128 abweicht, bedeutet das vielleicht etwas. Wenn Sie -1 in einen vorzeichenlosen 16-Bit-Datentyp eingeben, erhalten Sie 65535, was 1 weniger als 65536 ist. Wenn Sie 2 ^ 16 kennen, erkennen Sie Ihr Problem sofort.

Werfen Sie einen Blick auf diese Fragen zum Thema Oktal und prüfen Sie, ob das Erkennen von Oktal, wenn Sie versehentlich danach fragen, einen dieser Leute zu einem besseren Programmierer gemacht hätte.


1

Es gibt einige hocheffiziente mathematische und Datenkomprimierungstechniken, die Sie verwenden können, wenn Sie diese Systeme verstehen und wissen, wie sie funktionieren. Sie werden sie wahrscheinlich in Ihren ersten paar Jobs nicht viel verwenden. Aber es ist schön, sie in der Gesäßtasche zu haben, wenn Sie älter werden und gefragt werden, ob Sie das überarbeitete Legacy-System auf dem überarbeiteten Dinosaurier-Server mit geringer Leistung ausführen möchten.
Es wird wichtiger, wenn Sie mit Controllern und Elektronik arbeiten, die keine API haben. Vor allem, wenn Sie diese API schreiben.


1

In Einführungskursen zu Programmierkursen, die Teil des Informatikstudiums sind, ist es sehr sinnvoll, dieses Material gut zu kennen. Sie wenden sich erneut dem Thema zu, wenn Sie in Assemblersprache programmieren, Hardware entwerfen, einen Kurs über formale Sprachen belegen usw. Alle Elektrotechniker an meiner Universität benötigen einen Einführungskurs in die Programmierung und werden diese Informationen wahrscheinlich weiterhin verwenden. Außerhalb davon nicht schrecklich wichtig.


1

Oktalzahlen sind gelegentlich nützlich, wenn es um Zeichensätze geht. Letztere basieren auf Bytes und ein Oktal = 8 Bits = ein Byte. In UTF-8 können beispielsweise Nicht-ASCII-Zeichen zwei oder mehr Bytes enthalten. Oktalzahlen lassen sich bequemer darstellen als Hexadezimalzahlen.

Bits sind nützlich, weil ... hey! Sie wissen, dass Ihr Computer ständig mit Nullen und Einsen zu tun hat, oder? Ich meine es ernst ... Es geht nicht nur darum zu scherzen, dass Informatiker die einzigen sind, die wissen, dass 1 + 1 = 10. Es ist auch nützlich für bitbezogene Operatoren oder als Varbits. Letztere ermöglichen es, den Speicherbedarf in Datenbanken bei der Verarbeitung von Flagserien zu reduzieren.

Hexadezimal: Ich gehe davon aus, dass Sie noch nie einen Hex-Editor geöffnet haben, um die Statistiken und Ausrüstung Ihres RPG-Charakters zu verbessern. Wenn Sie dies getan hätten, anstatt einen Zeicheneditor herunterzuladen, würden Sie genau wissen, warum es praktisch ist, Hexadezimalzahlen sinnvoll zu verstehen. ;-)


Ich denke du meinst "Oktett", nicht "Oktal". Eine Oktalziffer besteht aus drei Bits. Die Verwendung von Oktalkonstanten für Nicht-ASCII-Zeichen ist ein Überbleibsel aus den Anfängen von C, das auf einem PDP-11 entwickelt wurde, der in den meisten Dokumentationen eine Oktaldarstellung verwendete (siehe diese PDP-11-Referenzkarte ).
TMN

Ich könnte. Englisch ist nicht meine Muttersprache. :-)
Denis de Bernardy

1

Ich habe vor 3 Jahren meinen Universitätsabschluss gemacht und finde es sehr wichtig, Hex-Zahlen lesen und schreiben zu können. Ich arbeite mit vielen großen XML-Dateien (100 MB +). Manchmal erhalten Sie eine XML-Datei, die ein ungültiges XML-Zeichen beanstandet, das in keinem Texteditor angezeigt werden kann. Daher musste ich den Hex-Editor verwenden und Code schreiben, um die ungültigen Zeichen zu lokalisieren. Diese Aufgabe wäre sehr schwierig, ohne die Hex-Nummer zu kennen.


1

Vor vielen Jahren habe ich bei der Arbeit an 8-Bit-Systemen den Wert von hex gelernt.

Die Klarheit des Verständnisses, dass sich etwas bei B000 oder E7FF befand, war erstaunlich.

Gestern musste ich genau wissen, welche Zeichen am Ende einer Textzeile standen. Es kann sehr wichtig sein, den Unterschied zwischen 0x0A und 0x0A 0x0D zu kennen.


1

Hat jemand ein gutes Beispiel dafür, wo der durchschnittliche Programmierer tatsächlich eine Oktalzahl verwenden würde?

Oktal ist heutzutage ziemlich selten, aber ich verwende Hex sehr häufig und denke oft über Probleme in der Binärdatei nach.

Ich programmiere hauptsächlich in C und C ++ mit einigen Objective C-Versionen und arbeite viel mit Raster- und Vektorgrafiken unter Linux und Mac OS X. In diesen Bereichen ist es von größter Bedeutung, Code zu schreiben, der effizient ausgeführt wird und den Speicher optimal ausnutzt. Sie müssen auch verstehen, wie die Maschinen intern darstellen, mit was Sie arbeiten. Die bequemste Art, das zu betrachten, ist hexadezimal. Zum Beispiel wird ein Standard-24-Bit-Farbpixel in drei Bytes dargestellt, und auf einen Blick zu wissen, dass 0x000000 schwarz, 0x00FF00 rot und 0x008000 pink ist, ist wirklich sehr, sehr nützlich!

Ich arbeite auch viel mit internationalen Standards für Dateiformate. Eine, mit der ich in letzter Zeit gearbeitet habe, ist MXF, das zum Speichern von Videos für Sendungen, DVDs usw. verwendet wird. Es ist ein Binärformat und auch hier ist es am einfachsten, hexadezimal oder manchmal binär zu verarbeiten. Wenn Sie debuggen, warum einige MXF-basierte Videos auf Ihrem System nicht richtig wiedergegeben werden, ist es sehr praktisch, einen Blick auf ein 32-Bit-Feld zu werfen und zu erkennen, dass versehentlich das Bit zum Ausblenden des Bildschirms gesetzt ist - und das können Sie das in hex, aber es ist ziemlich unmöglich in basis 10.

Wenn Sie Ihre Karriere damit verbringen, Perl zu schreiben, um Textzeichenfolgen zu massieren, müssen Sie wahrscheinlich nicht sehr vertraut mit Hex, Oktal oder Binär sein. Aber in dem Moment, in dem Sie anfangen, mit den Dingen umzugehen, die ich tue, sind Hex und Binär zumindest unerlässlich.


0

Sie sollten hexadezimal wissen, wenn Sie Programmierer werden möchten. Es wäre einfach zu umständlich, wenn Sie an dem seltenen Tag, an dem Sie es wissen müssen, zugeben müssten, dass Sie es nicht verstehen.

Das bedeutet nicht, dass Sie in der Lage sein müssen, Hexadezimalzahlen in Ihren Kopf einzufügen. Wenn Sie es trotzdem tun, werden Sie über die Regeln für die regelmäßige Hinzufügung durcheinander gebracht. :)


0

Was binär, hex und oktal gemeinsam haben, ist nicht, dass sie nicht base10 sind, sondern dass sie alle Potenzen von zwei sind. Da Computer von Natur aus binär sind, bietet dies jedem von ihnen eine bestimmte Anwendung, in der sie die geeignetste oder effizienteste Methode zum Anzeigen und Verarbeiten von Daten darstellen.

Dies war früher sehr wichtig, als die gesamte Programmierung auf niedrigem Niveau war. In der High-Level-Programmierung spielen Potenz-2-Zahlensysteme heutzutage eine viel geringere Rolle. Eine gründliche Einführung in sie in jedem Programmierkurs könnte ein Relikt der alten Tage sein.

Aber diese Zahlensysteme haben immer noch ihre Verwendung, selbst wenn Sie in höheren Sprachen arbeiten. Die Farbe wird zum Beispiel immer noch in 24 Bit gespeichert, 8 Bit pro Primärfarbe. Und da Hexadezimal die beste Möglichkeit ist, ein Byte lesbar darzustellen, ist es sogar Teil von CSS, das von Leuten verwendet werden soll, die noch nie eine Einführung in die Programmierung hatten.

Sie können Computer nicht verstehen, ohne Binärdaten zu verstehen. Eine Einführung in das Binäre ist ein notwendiger Bestandteil jeder gründlichen Einführung in die Programmierung. Möglicherweise müssen Sie im Arbeitsalltag nicht viele Umrechnungen zwischen Zahlensystemen durchführen, aber nur mit solchen Übungen können Sie sich wirklich mit diesen Zahlensystemen * vertraut machen. Die Kenntnis von mehr als einem Nicht-Base10-Zahlensystem ist der einzige Weg, richtig zu verstehen, dass Daten auf viele Arten dargestellt werden können, von denen alle gültig sind.

  • Wie John von Neumann sagte: "[..] Wir verstehen die Dinge nicht, wir gewöhnen uns daran."

0

Ich denke, die Konvertierung von einer Basis in eine andere ist für die Programmierung nicht sehr wichtig. In der High-Level-Programmierung benötigen Sie keine Konvertierungen (und möglicherweise sind auch Lib-Funktionen und der Taschenrechner verfügbar). Wenn Sie in die Programmierung auf niedrigerer Ebene eintauchen, befinden Sie sich nicht mehr in einem Einführungskurs.

Ich denke, zwei (verwandte) Themen sind wichtig, um in einem Basiskurs behandelt zu werden.

  1. Über die Kodierung. Es geht nicht um mathematische Umrechnung, sondern um die Verwendung von Zahlen (beliebige Arten von Zahlen) zum Speichern von Informationen (beliebige Arten von Informationen). Sie könnten dies auch mit Morsecode illustrieren oder durch Zahlen malen, wenn Sie wollten. Da Computer jedoch eher Binärdateien verwenden und Binärdateien normalerweise als Hex angezeigt werden, werden die Dinge normalerweise mit hexadezimalen Beispielen dargestellt. (Und wenn sie schon dabei sind, erklären sie vielleicht etwas über die Zeilenenden, die in diesem Thema erwähnt wurden. Ich würde nur raten, die verschiedenen Formen und Formen zu erkennen, von denen einige 0x0D, 0x0A sind , CRLF, '\ n' und '\ r')

  2. Überlaufprobleme. Auch dies muss nicht mit hex dargestellt werden. Sie könnten das y2k-Beispiel verwenden (das überhaupt nichts mit Hex zu tun hatte). Auch hier würde ich nur raten, die verschiedenen wahrscheinlichsten Indikatoren (255, 32767, 65535, 2M14) zu erkennen des internen Speichers, aber die Konvertierung ist nicht der wichtige Teil.

Ich bin anderer Meinung, dass Sie es für Bitflags wissen müssen (weil in einem Einführungskurs der Programmierung benannte Konstanten viel lehrreicher und nützlicher sind.)


0

Wenn Sie in die Embedded-Programmierung auf niedriger Ebene einsteigen, verwenden Sie Hexadezimal. Es wird beispielsweise zum Festlegen von Bitmustern in Hardwareregistern und von Bytewerten in Speicherabbildern verwendet. Sie werden auch lernen, jeden bitweisen Operator in der von Ihnen verwendeten Programmiersprache zu verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.