Dezimalzahl in Binärzahl umwandeln.
-
Aufgabe ist eine Dezimalzahl in Binärzahl umzuwandeln.
Nun ist meine Ausgabe in falscher Reihenfolge.
Wir sollten zur Lösung die Bitoperatoren benutzen.
Mein Lösungsweg war vor der while Schleife meine Variable a zu invertieren a=~a.
Ich verstehe nun nicht wieso es nicht invertiert wird.#include <stdio.h> #include <stdlib.h> int main() { unsigned short a; printf("Wert"); scanf("%hu",&a); printf("%hu\n",a); printf("%x\n",a); a=~a; while(a!=0) { if(0==a%2) { printf("0"); } else { printf("1"); } a=a/2; } return 0; }
-
Was meinst du, passiert beim invertieren?
-
ok inventieren bringt kein Ergebnis. Wie schaffe ich den die printfs zu verschieben? Ich vermute das schon mein Code irgendwie es unmöglich macht die zu verschieben.
-
Bei der Formatierung auch kein Wunder.
Wie wäre es zur Abwechslung mal, Codetags ordentlich zu verwenden? Oder den Code nicht einfach so dahinzuscheißen, damit man Bock bekommt, sich das für 3 Sekunden anzusehen?Und wenn du die Ausgabe umgedreht haben willst, wie wäre es dann mal, tatsächlich Bitoperatoren zu verwenden, anstatt die Aufgabenstellung komplett zu missachten und mit Modulo und Division zu arbeiten? Und dann mal umgedreht durch deine Zahl zu gehen?
-
Ich versteh es ja nicht, wie man ohne Modulo und Division überhaupt die 1 und 0 setzen würde.
-
Gandolf schrieb:
Ich versteh es ja nicht, wie man ohne Modulo und Division überhaupt die 1 und 0 setzen würde.
Dann solltest du dir vorher mal ansehen, wie Integer im Speicher abgelegt werden. Stichwort: Binärsystem.
-
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.