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+=rest
    

    immer 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!



  • @mr nobody:

    ...aber hoffentlich die 2. Version!?

    Greetz, Swordfish



  • 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


Anmelden zum Antworten