Binär???
-
Hallo!!!!
Ich hab mal ne Frage:
Wie kann man denn eine Dezimalzahl in eine 8-stellige Binärzahl umwandeln???
Gibt es da eine Funktion in C++???Ich danke schon mal!!
mfg Pascal
-
der computer kennt keine dezimalzahlen ergo eine zahl von dem computer ist schon eine binaerzahl
ist die frage wie man sie binaer ausgeben kann ?
ps.: und in eine 8 stellige geht das auch maxiamal mit zahlen kleiner 256
-
std::string Binaer(unsigned Dez) { std::string str = ""; while (Dez != 0) { str.insert(str.begin(), '0' + Dez % 2); Dez /= 2; } return str; }
Musst den String dann noch mit führenden Nullen auffüllen, bis du die acht
Stellen voll hast
-
Also ich hab folgendes zu bieten:
bool* ItoB (int Zeichen) { bool* pPuffer; int i=0; pPuffer = new bool[8]; for (i=7; i>=0; i--) { if ((Zeichen - (int)pow(2,i)) >= 0) { Zeichen -= (int)pow(2,i); pPuffer[i] = true; } else pPuffer[i] = false; } // SwitchArray(&pPuffer); // *argh* ok, also das array is verkehrtrum ;) return pPuffer; }
die Funktion wandelt dir eine int in ein bool array um
(liefert einen zeiger auf das array zurück)Allerdings dürfte sie bei zu hohen int zahlen undefiniertes verhalten zeigen
Also musst duie Fehlerabfrage selbst machenPS: verbesserungsvorschläge zu meiner lösung sind gern gesehen
-
Allerdings dürfte sie bei zu hohen int zahlen undefiniertes verhalten zeigen
Ein int ist nunmal größer als 8 Bit. Macht so also nicht viel Sinn. Taurins Variante mit string ist da ohnehin hübscher.
Und in der FAQ stehts auch nochmal.
-
oder so:
int main() { int zahl=4; char bin[]="00000000"; for(int i=0;i<8;i++){if (zahl&1) bin[7-i]++;zahl>>=1;} cout << bin; return 0; }
-
Tschuldigung für die komische for
for(int i=7;i>=0;i--){if (zahl&1) bin[i]++;zahl>>=1;}
-
DrGreenthumb schrieb:
Allerdings dürfte sie bei zu hohen int zahlen undefiniertes verhalten zeigen
Ein int ist nunmal größer als 8 Bit. Macht so also nicht viel Sinn. Taurins Variante mit string ist da ohnehin hübscher.
Und in der FAQ stehts auch nochmal.
Das hat mit der maximalen Zahlengröße einer int rein garnichts zutun!
Die Funktion ist eben auf ASCII werte konzipiert gewesen und da reichen 8bitDu kannst sie aber gern umschreiben (einfach die anzahl der Forschleifendurchläufe erhöhen und entsprechend mehr speicher reservieren und schon hast du s passend!) :p :p :p
schön ist relativ
-
schön ist relativ
Wenn man etwas komplizierter macht als es sein kann, ist es weniger schön. Nix relativ.
-
Ich finde, es ist ganz davon abhängig, wofür man die Funktion (bzw. die binäre Zahl) braucht. Will man sie nur ausgeben, ist es sicherlich einfacher sie in einem String zu speichern. Wenn man die Zahl aber z. B. als Flag einsetzt, dann kann man mit einem Bool-Array sicherlich besser arbeiten...
-
bool *ItoB(int Zeichen) { int anzbits=0,pot=1;// pot kann man auch mit pow machen ... while(Zeichen/pot>0) {anzbits++;pot*=2;}//Anzahl der bits feststellen bool *bin=new bool[anzbits]; for(int i=0;i<anzbits;i++){bin[anzbits-1-i]=Zeichen&1;Zeichen>>=1;} return bin; }
-
Und hier noch die Quelle für all die Lösungen:
http://c-plusplus.net/forum/viewtopic.php?t=42933-junix
-
Kann ich schweigen angesichts der Tatsache, daß schon wieder jemand POW benutzt, um Bits zu ermitteln?
Immer das gleiche: mit dem 4,8 Tonner zum Getränkeladen fahren, um zwei Kästen Coke zu holen...
-
Auch wenn das hier ein C++ forum ist sollte man einfache Lösungen nicht vergessen
char buffer[8+1]; int i; _itoa( (i % 256), buffer, 2 );
i zu konvertierender Wert
buffer Stringbuffer ausreichend groß
2 Basis zu der der Wert gebildet werden sollString of integer 117 (radix 2): 01110101
Siehe VC 6.0 hilfe mit itoa
-
Hab auch schon danach gesucht, aber nicht mehr gefunden.
Meine ursprüngliche Variante entsprach der von The_Freak, bis ich mich belehren lassen musste, das Bitrotation viel schöner ist.
Hab nur für mich nach ner Lösung gesucht alle Integerzahlen Binär darzustellen.
-
Den kannte ich noch nicht.
-
@_stefan
Wen PAD oder itoa? :p
-
<wollte eigentlich was sagen und es dann wieder löschen; löschen geht aber nicht!?>
-
Durch die Modulo Operation wird der wert auf den Bereich von 0x00 bis 0xff eingeschränkt.
Eine sinvolle und wahrscheinlich schnellere, somit bessere Alternative ist
i=i&0xff;
-
Ein guter Compiler wird in beiden Fällen identischen Code erzeugen.