Variable an Variable anhängen
-
Hallo!
Ich hab ein kleines Problem: Ich versuche eine Variable an eine Variable anzuhängen...cout<<"Bitte gib eine Dezimalzahl ein:"<<endl; cin>>dez; cout<<"###############################"<<endl; while(ende) { dez=dez/2; rest=dez%2; cout<<dez%2<<endl; if(dez==0){ ende=0; } }Also: Dieses Programm soll eine Dezimalzahl in eine Binäre umwandeln... dafür lass ich sie immer durch 2 teilen...
Nun wird sie aber immer Zeilenweise ausgegeben. Ich hab mir gedacht, dass ich sie so (oder so ähnlich :D)binaer+=restimmer die Zahl hinten dranhäng und sie dann halt rückwärts ausgib...
Aber leider wird des einfach hinzuadiert...Kann mir bitte jemand Helfen (bin C++ Anfänger :p)
Danke im voraus!
-
cout<<dez%2<<endl;Du muss endl weglassen.
Ansonsten das ist eine C++ frage , du solltest sie im C++ forum stellen.
-
Ich würd' eine Funktion dafür schreiben, bitweise testen und führende Nullen ignorieren:
#include <string> #include <sstream> #include <iostream> using namespace std; string int2binary( unsigned int number ) { stringstream ss; bool first_bit_set = false; for( size_t i = ( sizeof( unsigned int ) * 8 ); i != 0; --i ) { if( ( ( number >> ( i - 1 ) ) & 1 ) ) { first_bit_set = true; ss << '1'; } else { if( first_bit_set ) { ss << '0'; } } } return ss.str( ); } int main( ) { unsigned int number; bool success = true; cout << "Bitte gib eine positive Dezimalzahl ein:" << endl; do { if( !success ) { cout << endl << "Eingabefehler." << endl << endl; } success = true; cin >> number; if( cin.fail( ) ) { cin.clear( ); cin.ignore( cin.rdbuf( )->in_avail( ) ); success = false; } else if( static_cast< int >( number ) < 0 ) { success = false; } } while( !success ); cout << "Binary: " << int2binary( number ) << endl; }Greetz, Swordfish
-
Swordfish schrieb:
string int2binary( unsigned int number )
so eine umständliche implementierung hab' ich noch nie gesehen dafür...
-
net schrieb:
Swordfish schrieb:
string int2binary( unsigned int number )
so eine umständliche implementierung hab' ich noch nie gesehen dafür...
Aber dafür anschaulich... :p *duck 'n run*
string int2binary( unsigned int number ) { stack< char > binary; string binary_text; for( ; number; binary.push( '0' + number % 2 ), number /=2 ); for( ; !binary.empty( ); binary_text += binary.top( ), binary.pop( ) ); return binary_text; }<- Besser!? Wie würdest du's machen?
Greetz, Swordfish
-
Vielleicht ist es eleganter, das Problem zu lösen, indem man Bitoperatoren verwendet

Zunächst ermittelt man die Anzahl der Bits, die im System zur Speicherung einer int - Zahl verwendet werden.
Dies kann man zum Beispiel durch die Anweisung[cpp]int AnzahlBits = 8 * sizeof(intZahl);[/cpp]erreichen, wobei 'intZahl' die Zahl darstellt, die in binärer Schreibweise ausgegeben werden soll.
Nun kommen, schön verpackt in einer Schleife, die bitweise UND-Verknüpfung und Multiplikation hinzu.
Die Schleife sieht dann in etwa so aus:
[cpp]for(int i = AnzahlBits - 1; i >= 0; --i) { if(intZahl & (1 << i)) cout << "1"; else cout << "0"; } [/cpp]Edit: Mir fiel zu spät auf, dass es diese Lösung in ähnlicher Form schon gab, tut mir Leid Swordfish

Grüße, Bobby - Karle
-
Bobby - Karle schrieb:
Mir fiel zu spät auf, dass es diese Lösung in ähnlicher Form schon gab, tut mir Leid Swordfish

Hm...
2:50 zu spät...
Blinde Nuss! 
*scrn*
Greetz, Swordfish
BTW: net?
-
Danke für die Vielen Antworten!
Es sollte eigentlich a ganz ganz einfaches Programm werden...
ich nimm jetzt die Lösung von Swordfish her....VIELEN DANK!
-
-
mit Hilfe des STL-Aufbau Artikels
(http://www.c-plusplus.net/forum/viewtopic-var-t-is-150106.html)#include <iostream> #include <bitset> #include <limits> int main(int argc, char* argv[]) { int i = 33741; std::cout << std::bitset<std::numeric_limits<int>::digits>(i) << std::endl; return 0; }Gruß, blabladada