dualzahl shiften?
-
Hi Leute! Ich hab folgenden code:
#include<iostream> using namespace std; int main() { unsigned char a0, a1, a2, b0, b1, b2; unsigned short int a, b; unsigned short int i, x, z7, z6, z5, z4, z3, z2, z1, z0, y7, y6, y5, y4, a=235 b=121 x = (a & 00000001); z0 = x; x = (a & 00000010); z1 = x >> 1; x = a & 00000100; z2 = x >> 7; x = a & 00001000; z3 = x >> 11; cout << "Dualzahl= " << z3 << z2 << z1 << z0 << endl; system("pause"); return 0; }wenn ich hier nun die 1. ziffer in die z0 schreib, dann passt die... die zweite maskier ich nun mit 00000010 und verodere mit a und shifte um eins nach rechts. da bringt er mir dann aber das falsche...
Könnt ihr mir helfen was da faul ist?
-
Du meinst wohl UND statt ODER.
Außerdem sind in deinem Programm noch ein paar mehr Fehler, beispielsweise die 11.
-
Ich bin mir nicht sicher ob ich dein vorhaben richtig verstanden habe.
Es sieht so aus als möchtest du einen Dezimalzahl a=235 als Dualzahl ausgeben oder?Die Masken die du verwendest sind in Oktaldarstellung(wegen der führenden 0) d.h.
deine erste Bitmaske 00000001(Oktal) = 1(Dezimal) = 00000001(Dual) stimmt weil in allen Zahlensystem die Darstellung 1=1 ist, deine Zweite wird aber so aussehen: 00000010(Oktal) = 8(Dezimal) = 00001000(Dual) und damit ist das nicht die Maske die du haben willst. Die Masken die du haben willst entsprechen den Zweierpotenzen 1,2,4,8,...Deine Shifts sind auch zu viel. Mit x>>7 schiebst du 7 bits weiter, du willst an dieser Stelle aber nur 2 schieben...
EDIT: Semicolons fehlen im Code auch noch.
-
Das Problem in c++ ist, dass die schreibweise 00001111 eine oktalzahl ist.
für binärzahlen gibt es soweit ich weis keine schreibweise, aber was du
sehr einfach machen kannst (wo du gerade beim shiften bist):00000001 entspricht 1
00000010 entspricht (1<<1)
00000100 entspricht (1<<2)
00001000 entspricht (1<<3)usw... bis (1<<7)
sieht dann ungefähr so aus:
[code]#include<iostream> using namespace std; int main() { unsigned char a0, a1, a2, b0, b1, b2; unsigned short int a, b; unsigned short int i, x, z7, z6, z5, z4, z3, z2, z1, z0, y7, y6, y5, y4; a=235; b=121; x = (a & 1); // a & 00000001 bzw. a & 0x01 z0 = x; x = (a & (1<<1)); // a & 00000010 bzw. a & 0x02 z1 = x >> 1; x = a & (1<<2); // a & 00000100 bzw. a & 0x04 z2 = x >> 2; x = a & (1<<3); // a & 00001000 bzw. a & 0x08 z3 = x >> 3; cout << "Dualzahl= " << z3 << z2 << z1 << z0 << endl; system("pause"); return 0; }Ansonsten kannst du dir mit hilfe eines Taschenrechners die Dualzahl in einen Hex wert umrechnen
z.B. 00110101 -> 0x35
sieht dann bei einem beispiel so aus: x = (a & 0x04);Bei deinen Beispielen ist das aber sowieso relativ angenehm zu rechnen, da du ja nur jeweils 1 bit rausfiltern willst über das logische und.