Warum Hex verwenden?

Warum Hex verwenden?


Hey! Ich habe mir diesen Code unter http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html

angesehen

Mir ist aufgefallen, dass sie in manchen Situationen Hex-Zahlen verwendet haben, wie in Zeile 134:


for (j = 1; val && j <= 0x80; j <<= 1, q++)

Warum sollten sie jetzt 0x80 verwenden? Ich bin nicht so gut mit Hex, aber ich habe ein Online-Hex in Dezimalzahl gefunden und es hat mir 128 für 0x80 gegeben.


Auch vor Zeile 134, in Zeile 114 steht hier:


small_n = (n & 0xffff0000) == 0;

Die Hexadezimalzahl hat mir 4294901760 für diese Hexadezimalzahl gegeben.
Also machen sie hier in dieser Zeile ein bisschen UND und vergleichen das Ergebnis mit 0??


Warum nicht einfach die Nummer verwenden?
Kann das bitte jemand erklären und bitte Beispiele für andere Situationen geben.


Außerdem habe ich lange Codezeilen gesehen, in denen es nur Hex-Zahlen sind, und nie wirklich verstanden, warum :(


Antworten:


In beiden Fällen, die Sie zitieren, ist das Bitmuster der Nummer wichtig, nicht die tatsächliche Nummer.


Beispiel:
Im ersten Fall
j wird 1 sein, dann 2, 4, 8, 16, 32, 64 und schließlich 128, während die Schleife fortschreitet.


Im Binärformat also


0000:0001 , 0000:0010 , 0000:0100 , 0000:1000 , 0001:0000 , 0010:0000 , 0100:0000 und 1000:0000 .


Es gibt keine Option für binäre Konstanten in C (bis C23) oder C++ (bis C++14), aber es ist etwas klarer in Hex:
0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , und 0x80 .


Im zweiten Beispiel
war das Ziel, die unteren zwei Bytes des Werts zu entfernen.
Bei einem Wert von 1.234.567.890 möchten wir also 1.234.567.168 erhalten.

Hex , ist es klarer:Beginnen Sie mit 0x4996:02d2 , enden Sie mit 0x4996:0000 .


Einige Code-Antworten


Base Binary digits per character
2 1
4 2
8 3
16 4
32 5
64 6
128 7
256 8