Dezimalzahl in Binärzahl umwandeln.
-
ich kenne die Schiebeoperatoren << , >> die halt die zahlen verschieben um die entsprechenden Bits
a= 1001 0011
a= a << 1 = 0010 0110
-
Mehr nicht?
Was ist mit dem binären NICHT ~ ? (Hast du schon benutzt)Das wären dann drei. Das ist aber erst die Hälfte
-
und,oder,xor sind mir auch bekannt aber dachte jetzt nicht das ich sie für die Aufgabe brauche.
-
Dann verunde doch mal 7 und 6 mit 1
-
und funktioniert doch nur mit 1 und 0
0110
0011
-----------
0010Was ist mit 7 und 6 gemeint?
-
oder meinst du 1= 6 & 7;
-
Was du brauchst nennt sich Bitmasken.
Und jetzt brauchst du nur noch in der Schleife die Bitmaske passend verändern (und vor der Schleife entsprechend setzen).PS: Bei deinem bisherigen Code könnte man durch Benutzung einer rekursiven Funktion auch zu der gelangten Lösung kommen...
-
Dezimal 7 oder binär 0111
Dezimal 6 oder binär 0110
Dezimal 1 oder binär 00010111
0001 &???? was kommt hier raus
0110
0001 &???? und was hier ?
-
0111
0001 &0001
0110
0001 &0000
-
Bitmasken hatte ich noch nicht.
-
Du willst wissen, ob Bit
n
invalue
gesetzt ist?value & ( 1 << n )
Licht heller jetzt? oder von sinnen?
-
Gandolf schrieb:
Bitmasken hatte ich noch nicht.
Hast du ja gerade gemacht.
Vielleicht ist dir aufgefallen, dass du am Ergebnis sehen kannst, ob Bit 0 gesetzt ist.Wenn du damit nichts anfangen kannst, dann rechne nochmal 7%2 bzw 6%2 aus und vergleiche mit dem obigen Ergebnis.
-
denk daran, dass du zuerst das msb ausgeben musst. also von 7, 15 ... auf 0 zählen.
-
Was ich immer noch nicht verstehe ist wie ich die Bitoperation in mein Code einfügen soll. a ist eine beliebige Zahl a = a & 0b11111111. Wie regel ich denn die Ausgabe dann?
-
Du darfst (in diesem Fall) in der Bitmaske nur ein Bit auf 1 haben.
Du vergleichst, ob beim Verunden 0 raus kommt. Dann gibst du ein '0' aus.
Sonst eine '1'
-
Problem ist immer noch dass ich die Zahlen noch umdrehen muss in der Ausgabe. Wie kriege ich dies denn hin?
#include <stdio.h> #include <stdlib.h> int main() { unsigned short a; printf("Wert"); scanf("%hu",&a); printf("%hu\n",a); printf("%x\n",a); while(a!=0) { if(a & 0b00000001) { printf("1"); } else { printf("0"); } a=a/2; } return 0; }
-
Im Augenblick maskierst du das niedrigste Bit und schiebst den Wert darüber.
Das muss so aber nicht sein.
Man kann auch die Maske schieben.
-
Kannst du mir ein beispiel zeigen wie ich die Maske schieben soll?
-
Ich habs mal versucht, aber es scheint noch ein fehler zu haben.
#include <stdio.h> #include <stdlib.h> int main() { unsigned short b=0b00000001,a; printf("Wert"); scanf("%hu",&a); printf("%hu\n",a); printf("%x\n",a); while(a!=0) { if(a & 0b10000000) { printf("1"); } else { printf("0"); } a=a/2; b= b >> 1; } return 0; }
-
muster >> x;
verschiebt ein Bitmuster um x Binärstellen nach rechts undmuster << x;
um x nach links. Du kannst natürlich auch die Kurzschreibweise benutzen:maske >>= x; // anstatt maske = maske >> x;
Reicht dir das als Hinweis, wenn du das in diesem Thread (hoffentlich) gelernte Wissen anwendest und musst du genauer wissen, was du wann um wie viele Stellen verschieben musst?