Frage zum Programm, dass Dualzahlen binärcodiert ausgibt
-
Hallo Leute,
ich versuche grade diesen Programmcode zu verstehen und hätte da einige FRagen:#include <stdio.h> int main(){ int a; int i = 0; int bit = sizeof(int) * 8; printf("Geben Sie eine Zahl ein, für die das Bitmuster in Binärcodierung angezeigt werden soll:"); scanf("%d", &a); for(i = 0; i < bit; i++) { printf("%d", (a & 0x80000000) >> 31); a <<= 1; } printf("\n"); return 0; }
Undzwar, was heißt hier bit= sizeof(int)*8 ??
Und was heißt dieser Ausdruck: printf("%d", (a & 0x80000000) >> 31);
erstmal verwirrt mich der Wert mit einem x dazwischen und dann auch das logische und zwischen a und dem Wert, soll man also beides um 31 Stellen verschieben nach rechts??? Oder wie ist das zu verstehen??
Vielen vielen Dank im Voraus für eure Hilfen!!!
-
thal90 schrieb:
Undzwar, was heißt hier bit= sizeof(int)*8 ??
Das sizeof liefert die Größe des Datentyps (hier int) in Bytes zurück. Das *8 rechnet dann einfach in Bit um.
thal90 schrieb:
Und was heißt dieser Ausdruck: printf("%d", (a & 0x80000000) >> 31);
erstmal verwirrt mich der Wert mit einem x dazwischen und dann auch das logische und zwischen a und dem Wert, soll man also beides um 31 Stellen verschieben nach rechts??? Oder wie ist das zu verstehen??
Vielen vielen Dank im Voraus für eure Hilfen!!!0x wird bei Konstanten in Hexadezimalschreibweise vorgestellt. Das Und ist kein logisches, sondern ein binäres. Es werden also a und die Konstante binär verundet und dann verschoben.
-
Mit "0x" werden hexadezimale Zahlen eingeleitet, das 0x gehört also nicht zur Zahl. 0x80000000 = 2147483648. Wenn du dir diese Zahl in Binärform ansiehst, merkst du, dass sie nur ein Bit belegt, und zwar genau das 32.
Hier werden also alle Bits auf 0 gesetzt, außer das 32., das bleibt wie es ist. Dann wird es 31 stellen nach rechts geshiftet, steht jetzt also an erster Stelle. Es wird also eine 1 oder eine 0 ausgegeben, je nach dem, ob das Bit an dieser Stelle 1 oder 0 war. Warum das funktioniert kannste dir ja jetzt selber herleiten.
-
ahsoooo DANKE jetzt verstehe ich , viel leichter als ich mir vorgestellt hatte
könnte mir denn jemand ein Programmcode vorstellen, um die Zahl binärcodiert wiederzugeben, ohne diese erleichternden Operatoren zu benutzen??
Also ohne modulo und ohne diese 0x und so, geht das überhaupt, bestimmt oder?
Ich versuche grad durch "Selbstdtudium" bisschen programmierung zu verstehen, wäre echt hilfreich, wenn ihr mir so ein Programmcode zeigen könntet...
-
Ohne modulo und ohne shift? Wenn überhaupt, dann geht das nur mit ganz fiesen Tricks. Du fragst gerade, ob dir jemand zeigen könnte wie man einen Nagel ohne Hammer in die Wand bekommt. Es mag Wege geben, aber sinnvoll oder einfacher sind die deshalb noch lange nicht. Besser wäre es, du würdest lernen einen Hammer zu benutzen.
-
Modulo kann er nehmen.
Im Beispiel hat er doch nur & und shift benutzt.
Und dann noch geteilt.
-
doch shift schon aber nicht diese 0x und halt kein modulo, besser??
oder immernoch sehr schwer und umständlich und sinnlos..?
-
Statt der Hexzahl mit 0x kannst du auch den entsprechenden Dezimalwert angeben.
Das macht das Ganze nur schlechter lesbar.Modulo findest du eigentlich in jeder Prograqmmiersprache.
Shift dagegen nicht. Da muss man sich halt mit *2 bzw /2 helfen.