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
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.
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
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.
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'...
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
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
@ 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 ...
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)
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
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.
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.
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:
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.
:-)
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.
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
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.
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.