Integer in Zweierkomplement umwandeln
-
Hallo allerseits
Ich habe mal eine Frage. Ich bräuchte ein Stück Programmcode, dass eine Integerzahl ins Zweierkomplement (meinetwegen als String) umwandelt.
Mir persönlich fällt nur die "Schulmethode" ein, danach müsste ich aber die Bits alle umdrehen und dann auf einem String +1 rechnen, was zumindest nicht unaufwendig wird...
Daher die Frage, ob jmd. eine effektivere Methode kennt...
Danke schonmal
Mit freundlichen Gruß
Soul
-
Hallo Soul83,
da afaik jeder gängige Rechner das Zweierkomplement verwendet, kannst du sowas
auch etwa so machen: (ungetestet!!!)signed int i = -9999; unsigned int bit = 1 << (sizeof(unsigned int)*8-1); while(bit){// Solange das Bit nicht durchgelaufen ist und folglich bit != 0 if(i ^ bit) // Wenn das Bit gesetzt... std::cout << "1"; else std::cout << "0"; bit = bit >> 1; }Analog kannste das natürlich auch in einen String schreiben.
Gruß,
CSpille
-
schau mal im C++-Buch deiner wahl nach dem Komplement-operator

-
@pumuckl: der Komplement-operator hilft mir in dem Fall leider nicht weiter...
@spille: gute Idee, klappt aber leider nicht...er schreibt nur 1er in den Stream

-
Dann versuch doch mal:
if(i & bit) // Wenn das Bit gesetzt...
-
ups...
Man sollte auch kein exklusives-Oder nehmen ^^
Versuch es mal damit:
if(i&bit)Gruß,
CSpilleEDIT: Ok... Belli war schneller

-
Oh, das sieht gut aus... mir war nicht ganz klar, wie die if-Anweisung das AND or XOR interpretiert ... jetzt ist klar...
Danke euch
-
Warum gibt es eigentlich kein
std::bin(also analog zustd::hex)? Wird das zu wenig gebraucht, als dass die Implementation sich gelohnt hätte?