Dezimalzahl in Binärzahl umwandeln.
-
Integer werden als Binärzahlen gespeichert und wie soll mir das weiter helfen? Ich weiß immer noch nicht wie man die Bitoperatoren anwenden soll mit den printf.
-
Gandolf schrieb:
Integer werden als Binärzahlen gespeichert und wie soll mir das weiter helfen? Ich weiß immer noch nicht wie man die Bitoperatoren anwenden soll mit den printf.
dachschaden schrieb:
Dann solltest du dir vorher mal ansehen, wie Integer im Speicher abgelegt werden. Stichwort: Binärsystem.
-
Gandolf schrieb:
Wir sollten zur Lösung die Bitoperatoren benutzen.
Welche kennst du denn und was machen die?
Wenn du es nicht mit Worten erklären kannst, mach Beispiele.
-
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.