Umwandlung von Dezimalzahl zu Binärzahl
-
irgendwie steh ich grad auf dem Schlauch. Das Verfahren an sich ist klar, aber das funktioniert bei mir nicht:
#include <iostream> #include <vector> using namespace std; int main(int argc, char* argv[]) { int decimal; vector<int> binary; cin >> decimal; int digit; while (decimal != 0) { digit = decimal & 1; binary.push_back(digit); decimal = 1 >> decimal; } vector<int>::iterator begin; for (begin = binary.begin(); begin != binary.end(); ++begin) { cout << *begin; } return 0; }
Was mach ich falsch? decimal wird meistens schon nach dem ersten Durchlauf 0...
Danke, euer (auf der Leitung sitzender) smasher1985
-
Nimm decimal >> 1 statt 1 >> decimal. Ersteres verschiebt 1 um decimal binärstellen nach rechts wir wollen aber decimal um eine binärstelle nach rechts verschieben, also genau andersrum.
geloescht
-
upps, danke. Das war natürlich blöd...
Mfg, smasher1985
-
1>>decimal bedeutet das er 1 um decimal Stellen
nach rechts shiftet, und das soll er ja nich.
es muss also decimal>>1 heißen.
-
da war ich wohl zu lahm
-
geloescht schrieb:
pow(2, j) = 2 hoch j! Das ist diese berühmte Reihe: 1, 2, 4, 8, 16, 32, 64 usw.
1 << j ist genau das gleiche.
1 Dezimal = 1 Binär
2 Dezimal = 10 Binär
4 Dezimal = 100 Binär
8 Dezimal = 1000 Binär
16 Dezimal = 10000 Binär
usw.1 << j heißt, die binäre 1 wird j Stellen nach links verschoben. Aus meiner Tabelle ist ersichtlich, dass das das gleiche ist wie pow(2, j).
ich hoffe, es war nicht zu kompliziert
geloeschtJetzt hab's ich gemerkt, 2^j! Ich habe immer j^2 gelesen! 'ne neue Brille muss her...
-
Was wäre denn
pow(16,j)?
mit einem shift operator?
-
WilderSchorsch schrieb:
Was wäre denn
pow(16,j)?
mit einem shift operator?
4 << j?
-
da der links-shift einer multiplikation mit zwei gleich kommt
und viermal nachlinks somit 2*2*2*2 (also 16) ist, ja.
-
WilderSchorsch schrieb:
Was wäre denn
pow(16,j)?
mit einem shift operator?
1 << (4 * j)
-
Wie ich sehe sind hier ja die absoluten Optimierungsexperten am Werk
.
Warum nicht gleich so etwas?
std::string int2bin(int x) { std::string str; do str = (x & 1 ? "1" : "0") + str; while(x>>=1); return str; }
-
Weil nun die Bits in der Ausgabe von vorne nach hinten vertauscht sind, oder irre ich mich da
-
Äh nein! Die Reihenfolge sollte stimmen.
-
groovemaster2002 schrieb:
WilderSchorsch schrieb:
Was wäre denn
pow(16,j)?
mit einem shift operator?
1 << (4 * j)
Ist denn dies schneller als pow(16,j)?
-
char* inttobin(int x){return itoa(x,"",2);}
char* inttohex(int x){return itoa(x,"",16);}
char* inttooct(int x){return itoa(x,"",8);}
-
WilderSchorsch schrieb:
Ist denn dies schneller als pow(16,j)?
Wieso machst du nicht mal nen Benchmark Test und teilst uns die Ergebnisse mit?
MaSTaH schrieb:
Äh nein! Die Reihenfolge sollte stimmen.
Das ist wohl auch das einzigste was da stimmt.
Wo bleibt nur dieser Shlemiel?