Forum: PC-Programmierung Hexadezimal, Binär


von Warum Hexadezimal ? (Gast)


Lesenswert?

Hi,

Ich bin gerade bei C an den Bitoperationen. Ich verstehe einfach nicht 
warum man alles in Hex schreibt ? Binär ist für mich viel einfacher 
ersichtlicher. Z.b beim Programmieren eines uC's.

0b0000101 -> Hier ist klar ersichtlich das der Nullte und der 2te 
Ausgang
geschaltet ist.

0x05 -> wobei das hier nicht auf anhib ersichtlich ist was geschaltet 
ist.

Auch bein Bitshift ist es doch einfacher ersichtlicher in Binär. Ob es 
nun 2 Stellen nach links geschoben hat.

Es kann noch nicht sein das ich jedes mal den Taschenrechner nehmen muss 
um zu wissen welche Ausgänge gesetzt sind.

Oder hat mir hier jemand eine Anregung wie man das einfach rechnen kann 
?

Vielleicht sehe ich das auch einfach viel zu kompliziert an....

Gruss
KoE

von Displayer (Gast)


Lesenswert?

Warum Hexadezimal ? schrieb:
> Es kann noch nicht sein das ich jedes mal den Taschenrechner nehmen muss
> um zu wissen welche Ausgänge gesetzt sind.

Warum den Taschenrechner? Wer sowas nicht im Kopf berechnen kann, hat 
noch einiges an Lernarbeit vor sich.

von Uhu U. (uhu)


Lesenswert?

Warum Hexadezimal ? schrieb:
> Ich verstehe einfach nicht warum man alles in Hex schreibt ?

Weil man im Binärformat zu viel zu schreiben hat.

von Christian M. (Gast)


Lesenswert?

Warum Hexadezimal ? schrieb:
> Ich verstehe einfach nicht warum man alles in Hex schreibt ?

Schreibt man auch nicht, sondern so, wie es für die Anwendung am 
zweckmässigsten ist. Hast Du ein Bsp. für Deine Aussage?

Gruss Chregu

von Markus F. (mfro)


Lesenswert?

Spätestens wenn Du die dritte Binärkonstante mit 64 Bit hingeschrieben 
hast, weißt Du, warum ;).

Hexadezimaldarstellung: jedes Zeichen ist ein Nibble, also 4 Bit, mit 16 
möglichen Werten. Welcher Wert da für welche Bitkombination steht, ist 
noch überschaubar zu merken (das ist nur eine Frage der Übung) und wenn 
man's einmal kann, wundert man sich über solche Fragen.

von Justus S. (jussa)


Lesenswert?

Warum Hexadezimal ? schrieb:
> 0b0000101 -> Hier ist klar ersichtlich das der Nullte und der 2te
> Ausgang
> geschaltet ist.

und du lieferst hier gleich einen Grund, warum man es eher nicht macht, 
denn deinem 'Byte' fehlt eine '0'...

von Klaus (Gast)


Lesenswert?

Justus S. schrieb:
> und du lieferst hier gleich einen Grund, warum man es eher nicht macht,
> denn deinem 'Byte' fehlt eine '0'...

Führende Nullen kann man weglassen, da fehlt also nichts.

MfG Klaus

von Warum Hexadezimal ? (Gast)


Lesenswert?

Justus S. schrieb:
> Warum Hexadezimal ? schrieb:
>> 0b0000101 -> Hier ist klar ersichtlich das der Nullte und der 2te
>> Ausgang
>> geschaltet ist.
>
> und du lieferst hier gleich einen Grund, warum man es eher nicht macht,
> denn deinem 'Byte' fehlt eine '0'...

Naja hier sollte schon 0b00000101 stehen. Wenn ich schon vier Nulle 
davor geschrieben habe.

Ich denke mein Hauptproblem ist halt das man dies im Alltäglichen 
gebrauch einfach so gut wie nie benötigt... daher fällt mir die 
umrechnung so schwer..

Naja danke für die Antworten

von Jens G. (jensig)


Lesenswert?

@ Klaus (Gast)

>Justus S. schrieb:
>> und du lieferst hier gleich einen Grund, warum man es eher nicht macht,
>> denn deinem 'Byte' fehlt eine '0'...

>Führende Nullen kann man weglassen, da fehlt also nichts.

Ist zwar richtig, aber extra die 4 führenden Nullen anzugeben, um die 5. 
Null wegzulassen, ist irgendwie merkwürdig.
Da paßt Justus' Aussage perfekt ...

von Route_66 H. (route_66)


Lesenswert?

Jens G. schrieb:
> Ist zwar richtig, aber extra die 4 führenden Nullen anzugeben, um die 5.
> Null wegzulassen, ist irgendwie merkwürdig.

Ich schreibe in meinen Assemblerquelltexten auch häufig 0080H. Das zeigt 
mir immer deutlich, das ein 16 Bit Wert gemeint ist und nicht wie bei 
80H ein Byte.
Es geht einfach um Lesbarkeit auch nach Jaheren.
Insofern hat auch die Schreibweise 01001100B ihre Berechtigung und wird 
gern verwendet.
z.B. bei Matrix-Fonts kann im Quelltext das Muster direkt betrachtet 
werden:

  .DB  01111111B  ;44H => D
  .DB  01000001B
  .DB  01000001B
  .DB  00100010B
  .DB  00011100B

  .DB  01111111B  ;45H => E
  .DB  01001001B
  .DB  01001001B
  .DB  01001001B
  .DB  01000001B

(Kopf drehen)

von Georg (Gast)


Lesenswert?

Warum Hexadezimal ? schrieb:
> Vielleicht sehe ich das auch einfach viel zu kompliziert an....

Ja, in 2facher Hinsicht:

1. Das Bitmuster für 0..F hat man in kurzer Zeit sowieso im Kopf. 16 
verschiedene Muster sind keine Überforderung.

2. Die Diskussion ist eigentlich überflüssig, da man ja schreiben kann 
wie man will, entweder 0E3H oder 11100011B oder 227D, Details stehen im 
Handbuch.

Ich schreibe z.B. Tabellen für Pixelfonts binär, das sieht man schon im 
Listing wie der Buchstabe rauskommt, und es ist viel einfacher zu 
entwerfen. Dasselbe bei bitweise organisierten Control-Registern. 
Nichtsdestoweniger ist ein Taschenrechner sehr praktisch.

Georg

von Jim M. (turboj)


Lesenswert?

Warum Hexadezimal ? schrieb:
> 0b0000101 -> Hier ist klar ersichtlich das der Nullte und der 2te
> Ausgang
> geschaltet ist.
>
> 0x05 -> wobei das hier nicht auf anhib ersichtlich ist was geschaltet
> ist.

Das ist eine Frage der Übung. Bei 0xC0 und 0b1100000 sieht es schon 
anders aus, und bei mehr als 8 Bits dürften auch Deine Augen schnell 
aussteigen.

Die 16 Kombinationen für Hex 0-F sind IMO leicht zu merken und fassen 
einfach 4 Bits zusammen.

Für komplizierere Registerzuweisungen sollte man ohnehin besser 
Konstanten oder Makros benutzen.

von doppelschwarz (Gast)


Lesenswert?

Warum Hexadezimal ? schrieb:
> 0b0000101 -> Hier ist klar ersichtlich das der Nullte und der 2te
> Ausgang
> geschaltet ist.

Noch besser lesbar ist
1
(1u << 2) + (1u << 0)
Das kann man auch bei Ports mit 16 Pins noch gut lesen.

Bei mehr als 8 Bit wird die Binärdarstellung sehr unübersichtlich, bei 
64 Bit ist es hexadezimal aber auch nicht anders.

von Eric B. (beric)


Lesenswert?

doppelschwarz schrieb:
> Noch besser lesbar ist
>  (1u << 2) + (1u << 0)
> Das kann man auch bei Ports mit 16 Pins noch gut lesen.

Da sind wir dann unterschiedlicher Meinung. Ich finde 0x05 da deutlich 
einfacher und beser zu lesen.
Noch besser lesbar als 0x05, 05H oder 0b00000101 wäre aber:
1
PIN_B2 | PIN_B0
 oder sogar
1
LINKES_AUGE | RECHTES_AUGE
 mit entsprechenden Definitionen...

von Der Andere (Gast)


Lesenswert?

Eric B. schrieb:
> Noch besser lesbar als 0x05, 05H oder 0b00000101 wäre aber:
> PIN_B2 | > PIN_B0
> oder sogar
> LINKES_AUGE | RECHTES_AUGE

Dem ist nichts mehr hinzuzufügen.
:-)

von Mark B. (markbrandis)


Lesenswert?

Warum Hexadezimal ? schrieb:
> 0b0000101 -> Hier ist klar ersichtlich das der Nullte und der 2te
> Ausgang
> geschaltet ist.

Es gibt keinen nullten Ausgang. Für physikalisch real vorhandene Dinge 
verwendet man üblicherweise Ordinalzahlen.

"Bit 0 steuert den ersten real vorhandenen Ausgang an, Bit 7 den 
letzten" ist im Endeffekt eine Zuordnung von Software zu Realität.

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Jim M. schrieb:
> Das ist eine Frage der Übung. Bei 0xC0 und 0b1100000 sieht es schon
> anders aus

Und das willst du gleich demonstrieren, indem du eine Null weglässt? Und 
das ist KEINE führende Null.

Georg

von B. S. (bestucki)


Lesenswert?

Warum Hexadezimal ? schrieb:
> Ich bin gerade bei C an den Bitoperationen. Ich verstehe einfach nicht
> warum man alles in Hex schreibt ? Binär ist für mich viel einfacher
> ersichtlicher.

Weil laut Standard nur die Oktale, Dezimale und Hexadezimale 
Schreibweise für Ganzzahlen erlaubt ist. Sowas wie 0b10101010 ist eine 
Compilererweiterung. Andere Gründe bezüglich Übersichtlichkeit wurden ja 
bereits genannt.

von qwertzuio (Gast)


Lesenswert?

Klaus schrieb:
> Führende Nullen kann man weglassen, da fehlt also nichts.

In der Digitaltechnik und der Mathematik haben führende Nullen keine 
Bedeutung. Führende Nullen gibt es nur in Unternehmen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.