Wenn Sie binary[i] = 0000
schreiben Sie sagen, dass Sie Oktal konstant binary[i]
zuweisen welches ist 0
. Alle führenden Nullen sind weggelassen. Aber die erste Null gibt an, dass die Konstante als oktal interpretiert werden sollte. Ein anderes Beispiel: int x = 000011
bedeutet nur, dass x
ein Oktalwert von 11
oder Dezimalwert von 9
zugewiesen ist. So versteht der Compiler Konstanten.
Wenn der Wert im Speicher gespeichert ist, weiß er nicht, aus welcher Basis er geschrieben wurde. Alle Zahlen werden in binärer Darstellung gespeichert, wie Sie wissen. Zahlen können jedoch viele Ansichten in verschiedenen Basen haben. Wir sind bequem mit Zahlen in dezimalAnsicht zu arbeiten.
Es gibt viele Spezifizierer für printf
für integer zur Ausgabe einige seiner Darstellungen, sie sind %u
- dezimal, %x
- hex, %o
- für Oktal. Leider keine Möglichkeit, eine Binärzahldarstellung auszugeben. Um die Zahl in base2 auszugeben, sollte man jede Binärziffer (0 oder 1) manuell berechnen und in der entsprechenden Reihenfolge ausdrucken.
Verwenden Sie den folgenden Code, um die Binärzahldarstellung auszugeben.
void printInBase2(int n) {
if(n == 0) { printf("0"); return; }
int b = 0;
for(b = 0; n >> b + 1; b++);
for(; b >= 0; b--)
printf("%c", (n >> b) % 2 + '0');
}
Um eine Nummer aus einer hexadezimalen Darstellung gelesen, die in String gespeichert ist, können Sie dies tun:
unsigned int number;
char hexstring[] = "24020004";
sscanf(hexstring, "%x", &number);
Falls Sie Binärzahlen in int binary[]
Array speichern möchten, dass Sie ähnlich, was Sie taten tun können mit String
case '0': binary[4 * i + 3] = 0, binary[4 * i + 2] = 0, binary[4 * i + 1] = 0, binary[4 * i] = 0; break;
case '1': binary[4 * i + 3] = 0, binary[4 * i + 2] = 0, binary[4 * i + 1] = 0, binary[4 * i] = 1; break;
case '2': binary[4 * i + 3] = 0, binary[4 * i + 2] = 0, binary[4 * i + 1] = 1, binary[4 * i] = 0; break;
...
case 'f': binary[4 * i + 3] = 1, binary[4 * i + 2] = 1, binary[4 * i + 1] = 1, binary[4 * i] = 1; break;
Auf diese Weise speichern Sie jede Binärziffer getrennt. Beachten Sie, dass Sie binary
Array 4 mal länger als hexstring
sein sollte.
Whar abour 'Fall' 0 ': binär [i] = 0x0; Unterbrechung; Fall '1': binär [i] = 0x1; Unterbrechung; ...... Fall 'f': binär [i] = 0xf; Pause; '? –
"..wenn ich den Wert von binary [i] drucke, gibt es 0 statt 0000 zurück" - binary [i] 'ist eine Zahl (speziell eine vorzeichenbehaftete ganze Zahl) und Zahlen haben keine führenden Nullen. Sie können erzwingen, dass 'printf' sie anzeigt:' printf ("% 04d", binary [i]); '. Aber das bedeutet nicht, dass sie im Wert selbst "gespeichert" sind. – usr2564301