Frage

Hey! Ich war auf der Suche auf diesen Code unter http://www.gnu.org/ Software / M68HC11 / examples / primes_8c-source.html

Ich bemerkte, dass sie in einigen Situationen Hex-Zahlen verwendet, wie in Zeile 134:

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

Warum sollte sie nutzen die 0x80? Ich bin nicht so gut mit hex aber ich fand ein Online-hex dezimal und es gab mir 128 für 0x80.

Auch vor der Leitung 134, auf der Leitung 114 haben sie diese:

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

Die hex dezimal gab mir 4294901760 für die Hex-Zahl. Also hier in dieser Linie, sie machen ein wenig und und vergleichen das Ergebnis auf 0 ??

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

Auch habe ich große Codezeilen zu sehen, wo es nur Hex-Zahlen und nie wirklich verstanden, warum: (

War es hilfreich?

Lösung

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

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

In binär, das heißt,

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 oder C ++, aber es ist etwas klarer in Hex: 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40 und 0x80.

Im zweiten Beispiel, Ziel war es, die unteren zwei Bytes des Wertes zu entfernen. Gegeben, so einen Wert von 1234567890 wir mit 1234567168 wollen am Ende.
In hex, dann ist es deutlicher: mit 0x4996:02d2 beginnen, enden mit 0x4996:0000

.

Andere Tipps

Es gibt eine direkte Zuordnung zwischen hex (oder Oktal was das betrifft) Ziffern und die zugrundeliegenden Bitmuster, das nicht der Fall ist dezimal. Ein Dezimalwert ‚9‘ steht für etwas anderes in Bezug auf Bitmuster je nachdem, welche Spalte es in ist und welche Zahlen sie umgeben - es keine direkte Beziehung zu einem Bitmuster haben. In hex, bedeutet eine ‚9‘ immer ‚1001‘, egal welche Spalte. 9 = '1001', 95 = '0101 · 1001 *' und so weiter.

Als Überbleibsel meiner 8-Bit-Tage finde ich hex eine bequeme Abkürzung für etwas binär. Bit Fummeln ist eine sterbende Fertigkeit. Once (vor etwa 10 Jahren) habe ich ein drittes Jahr Networking-Papier an der Universität, wo nur 10% (5 von 50 oder so) der Menschen in der Klasse könnte eine Bitmaske berechnen.

seine eine Bitmaske. Hex-Werte machen es einfach, die zugrunde liegende binäre Darstellung zu sehen. n & 0xffff0000 gibt die oberen 16 Bits von n. 0xffff0000 bedeutet "16 1s und 16 0er in binären"

0x80 bedeutet "1000000", so dass Sie beginnen mit "00000001" und weiterhin, dass etwas mehr als nach links "0000010" Verschiebung "0000100", etc, bis "1000000"

0xffff0000 ist leicht zu verstehen, dass es 16-mal "1" und 16-mal "0" in einem 32-Bit-Wert, während 4294901760 Magie ist.

Ich finde es unerträglich, dass die C-Familie von Sprachen hat immer Oktal und hex unterstützt, aber nicht binär. Ich habe schon lange gewünscht, dass sie eine direkte Unterstützung für binäre hinzufügen würde:

int mask = 0b00001111;

Viele Jahre / Arbeitsplätze vor, während an einem Projekt arbeiten, die eine enorme Menge an Bit-Ebene Mathematik beteiligt, habe ich satt und eine Header-Datei erzeugt, die Konstanten für alle möglichen binären Werte bis zu 8 Bits definiert enthielt:

#define b0        (0x00)
#define b1        (0x01)
#define b00       (0x00)
#define b01       (0x01)
#define b10       (0x02)
#define b11       (0x03)
#define b000      (0x00)
#define b001      (0x01)
...
#define b11111110 (0xFE)
#define b11111111 (0xFF)

Es hat sich gelegentlich gemacht bestimmte Bit-Level-Code besser lesbar.

Manchmal macht die visuelle Darstellung von Werten in HEX-Code besser lesbar oder verständlich. Zum Beispiel bitmasking oder die Verwendung von Bits wird nicht offensichtlich, wenn sie bei Dezimaldarstellungen von Zahlen suchen.

Dies kann manchmal mit der Menge an Raum tut eine bestimmte Wert Art zu bieten hat, so dass auch eine Rolle spielen.

Ein typisches Beispiel in einer binären Einstellung sein könnte, so dass anstelle der Verwendung dezimal einige Werte zu zeigen, verwenden wir binär.

sagen wir mal ein Objekt eine nicht-exklusive Reihe von Eigenschaften hatte, die Werte von entweder hatte oder aus (3 von ihnen) - ein Weg, der Zustand dieser Eigenschaften darzustellen mit 3 Bits ist.

gültige Darstellungen sind 0 bis 7 in dezimal, aber das ist nicht so offensichtlich. offensichtlicher ist die binäre Darstellung:

000, 001, 010, 011, 100, 101, 110, 111

Auch sind einige Leute nur sehr komfortabel mit hex. Beachten Sie auch, dass hartcodierte magische Zahlen sind genau das, und es ist gar nicht so wichtig, egal Nummerierungssystem zu verwenden,

Ich hoffe, das hilft.

Im Allgemeinen ist die Verwendung von Hex-Nummern statt Dezimal ist es, weil der Computer mit Bits (Binärzahlen) arbeitet, und wenn Sie mit Bits arbeiten sind auch verständlich ist Hexadezimalzahlen zu verwenden, weil einfacher ist, von Hex gehen Binärdatei, die von dezimal zu binär.

OxFF = 1111 1111 ( F = 1111 )

und

255 = 1111 1111 

da

255 / 2 = 127 (rest 1)
127 / 2 = 63 (rest 1)
63 / 2 = 31 (rest 1)
... etc

Können Sie das sehen? Es ist viel einfacher von Hex zu binär zu übergeben.

Die größte Verwendung von Hex ist wahrscheinlich in Embedded-Programmierung. Hex-Zahlen verwendet werden, um einzelne Bits in Hardware-Registern zu maskieren, oder teilen Sie mehrere numerische Werte verpackt in einer einzigen 8, 16, oder 32-Bit-Register.

Wenn einzelne Bit-Masken spezifizieren, beginnen viele Menschen aus durch:

#define bit_0 1
#define bit_1 2
#define bit_2 4
#define bit_3 8
#define bit_4 16
etc...

Nach einer Weile sie vorrücken zu:

#define bit_0 0x01
#define bit_1 0x02
#define bit_2 0x04
#define bit_3 0x08
#define bit_4 0x10
etc...

Dann lernen sie zu betrügen, und lassen Sie die Compiler die Werte als Teil der Kompilierung Optimierung generieren:

#define bit_0 (1<<0)
#define bit_1 (1<<1)
#define bit_2 (1<<2)
#define bit_3 (1<<3)
#define bit_4 (1<<4)
etc...

Es gibt 8 Bits in einem Byte. Hex, Basis 16, ist knapp. Jeder möglicher Byte-Wert ausgedrückt wird mit zwei Zeichen aus der Sammlung 0..9 plus a, b, c, d, e, f.

Basis 256 wäre kurz und bündig. Jede mögliche Byte könnte seinen eigenen Single-Charakter hat, aber die meisten menschliche Sprachen nicht verwenden 256 Zeichen, so Hex ist der Sieger.

Um die Bedeutung zu verstehen terse ist, dass in den 1970er Jahren betrachten zurück, wenn Sie Ihre Megabyte Speicher untersuchen wollte, wurde es in hex ausgedruckt. Der Ausdruck würde mehrere tausend Seiten von großen Papier. Octal würde noch mehr Bäume verschwendet haben.

Um genauer zu sein, hex und dezimal, sind alle Zahlen. Die radix (Basis 10, 16, usw.) sind Möglichkeiten, diese Zahlen in einer Weise zu präsentieren, die entweder klaren oder bequemer.

Bei der Diskussion „wie viele von etwas gibt es“ wir normalerweise dezimal verwenden. Wenn wir an den Adressen oder Bitmuster auf Computer suchen, ist hex in der Regel bevorzugt, weil oft die Bedeutung des einzelnen Bytes von Bedeutung sein könnte.

Hex, (und Oktal) haben die Eigenschaft, dass sie Potenzen von zwei sind, so dass sie Karte Gruppierungen von Bit schön. Hex abbildet 4 Bits zu einem hex Nibble (0-F), so dass ein Byte in zwei Nibbles (00-FF) gespeichert ist. Octal war beliebt bei Digital Equipment (DEC) und anderen älteren Maschinen, sondern eine Oktalziffer Karten zu drei Bits, so dass es so schön nicht grenz Bytegrenzen der Fall ist.

Insgesamt ist die Wahl von Radix ist ein Weg, um Ihre Programmierung einfacher zu machen -. Die eine, die die Domain am besten entspricht

Hex oder hexadezimal, Zahlen repräsentieren 4 Datenbits, 0 bis 15 oder in HEX 0 bis F. Zwei Hex-Werte stellen einen Byte.

in der Datei sucht, das ist ein paar ziemlich groady Code. Hoffe, dass Sie bei C gut sind und sie nicht als Tutorial mit ...

Hex ist nützlich, wenn Sie direkt auf Bit-Ebene arbeiten oder knapp darüber. Z. B, auf einen Fahrer zu arbeiten, wo Sie suchen direkt an die Bits in die von einem Gerät kommen und die Ergebnisse twiddling so, dass jemand anderes ein kohärentes Ergebnis lesen kann. Es ist eine kompakte ziemlich einfach zu lesende Darstellung von binären.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top