Dezimalzahl in Binärzahl umwandeln.
-
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?
-
sry hab mich verschrieben
#include <stdio.h> #include <stdlib.h> int main() { unsigned short b=0b10000000,a; printf("Wert"); scanf("%hu",&a); printf("%hu\n",a); printf("%x\n",a); while(a!=0) { if(a & b) { printf("1"); } else { printf("0"); } a=a/2; b= b >> 1; } return 0; }
-
Gib's mit dem Programmieren einfach auf. Du hast ja nicht mal hinbekommen,
c print bitmask
auch nur einmal zu googlen und dir dort ein paar Codebeispiele anzuschauen. Und auch nach drei Seiten hast du immer noch beschissene Formatierung.Lass es einfach sein. Werd' Altenpfleger oder sowas, da sparst du uns und dir Zeit mit, und der Job ist sogar gefragt.
-
Du veränderst ja auch jetzt noch in jedem Schleifendurchgang die Variable a!
Und die Schleifenbedingung mußt du auch anpassen (auf "b > 0").
-
Mach das Verfahren erstmal mit zwei Blatt Papier und Bleistift.
Und überleg mal, was passiert, wenn du 1 nach rechts schiebst.
Und überleg mal, was bei a=a/2; mit a passiert.
Das Ganze in Binärdarstellung.Tipp: Der Windows-Rechner kennt auch eine Darstellung für Programmierer.