dezimal > binär > hexadezimal



  • hio

    ich würde gern zu lernen ect ein kleines prog schreiben, indem sich auf anfrage dezimal zu binär und hexadezimal umrechnet, bzw in die andern fälle

    also das ganze mit stift un zettel bekomm ich leucht hin, also in die 3 verschiedenen systeme umzurechnen.
    Aber wenn ich verzweifel fast, dass zu programmiern, deswegen sieht mein kleines prog auch noch recht "wüst" aus:

    [cpp]
    	float f_Celsius, f_Fahrenheit, f_Kelvin;
    	int i_biZahl, i_deziZahl, i_hexaZahl;
    	unsigned int ui_Antwort_Menue, ui_Antwort_Temp,ui_Antwort_Zahlsys;
    .
    .
    //hab hier noch was andres eingebaut, also temperatur umrechnung
    .
    .
    	case 2:
    
    			cout<<"(1) Dezimal in Binär und Hexadezimal?"<<endl;
    			cout<<"(2) Binär in Dezimal und Hexadezimal?"<<endl;
    			cout<<"(3) Hexadezimal in Binär und Dezimal?"<<endl;
    			cin>> ui_Antwort_Zahlsys;
    			cout<<"Was soll umgerechnet werden?: ";
    
    			switch (ui_Antwort_Zahlsys)
    			{
    
    				case 1:
    					cin>>i_deziZahl;
    
    			}
    	case 3:
    
    	break;
    
    	default :
    		cout<<"Diese Moeglichkeit besteht nicht!"<<endl<<endl;
    [/cpp]
    

    könnt ihr mir vll anregungen, hilfen, beispiele, was der geier sagen, damit ich da n bissl vorwärts komm?

    mfg
    ani

    edit: dann is mir grade noch eingefallen, wie kann ich machen, das wenn ich z.b. alles schön umgerechnet hab, wieder zum anfang komme? also da wos prog gestartet hat

    ani



    1. Du findest genügend Beispiele im Internet eine Zahl in einen String umzuwandeln der dann die Zahl in binär/dezimaler/hexadezimaler Darstellung enthält. Einfach bei Google eingeben. Wenn du dir die Arbeit der Umwandlung sparen willst ist auch folgendes möglich:
    int i = 15;
    cout << hex << i; // F
    
    1. Mit Hilfe einer Schleife:
    bool beenden = false;
    while(beenden == false) // bzw. while(!beenden)
    {
        ... dein code ...
    
        char c;
        cout << "Wollen Sie beenden j/n?" << endl;
        cin >> c;
    
        if(c == 'j')
            beenden = true;
    }
    

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Generell kannst du Dezimalzahlen in Dualzahlen per Euklidischen Verfahren umwandeln ...

    25 / 2 = 12 | 1 ^ N
    12 / 2 = 06 | 0 | E
    06 / 2 = 03 | 0 | S
    03 / 2 = 01 | 1 | E
    01 / 2 = 00 | 1 | L
    
    d = 25;
    r = d % 16             = 9; ^
    d = ((d - r) / 16) = 1;
    r = d % 16             = 1; |
    

    (25)10 ^= (11001)2 ^= (19)hex

    d = 45;
    r = d % 16             = D; ^ (13 ^= D)
    d = ((d - r) / 16) = 2;
    r = d % 16             = 2; |
    

    (45)10 ^= (2D)hex

    d = 260;
    r = 260 % 16           = 4; ^
    d = ((d - r) / 16) = 16;
    r = d % 16             = 0; |
    d = ((d - r) / 16) = 1;
    r = d % 16             = 1; |
    

    (260)10 ^= (104)hex ...



  • das mit dem binär hab ich verstande, un da fehlt mir nur einwas zu ner guten umsetzten, aber das mit dem hexa versteht ich net ganz
    kannste vll bissl genauer erklärn? oder bin ich einfach zu blub ^^

    bei dem binär is müsste ich ja so machen:

    [cpp]
    				case 1:
    					cin>>i_deziZahl;
    					for (int i=0;i<[b]keine Ahnung[/b];i++)
    					{
    						array[i] = i_deziZahl % 2;
    						i_deziZahl /=2;
    						cout<<i_deziZahl<<endl;
    					}
    					for ([b]?[/b])
    					{
    						//i-was, damit die nullen und einsen getauscht werden (Rheinfolge)
    					}
    					for (int o=0;o<[b]anzhal der nullen und einsen[/b];o++)
    						cout<<array[o];
    				break;
    [/cpp]
    


  • ehm wo ist dein Problem?
    machs rekursiv ^^



  • hm ok, aber was muss ich bei
    for (int i=0;i<keine Ahnung;i++) und
    for (int o=0;o<anzhal der nullen und einsen;o++)
    rein machen?, also da wos schrwaz gedruckt is



  • Animal21 schrieb:

    das mit dem binär hab ich verstande, un da fehlt mir nur einwas zu ner guten umsetzten, aber das mit dem hexa versteht ich net ganz

    ist ganz einfach. in der praxis dienen hexzahlen dazu, mehrere bits einer binärzahl zusammenzufassen. dabei ergeben immer 4 bits eine hexziffer. das sieht dann so aus:

    bin   hex
    ---------
    0000  0
    0001  1
    0010  2
    0011  3
    ...
    <snip>
    ...
    1100  c
    1101  d
    1110  e
    1111  f
    

    hat man 8 bits, dann ergibt das 2 hexziffern, also eine zweistellige hexzahl. beispiel: 3chex = 0011 1100bin (links das bitmuster für die 3, rechts das für's C) zwölf bits ergeben eine 3-stellige hexzahl usw, usw...
    zum umwandeln guckst du: http://www.harmes.de/html/fi/umrechnung.html



  • ich würde einfach ein int einlesen, mit den entsprechenden präfixen, wie 0x für hexadezimal und ich glaub 0b für binär wird entschieden, welches Zahlensystem es ist. diese Zahl würd ich dann einfach in allen Zahlensysthemen ausgeben:

    int
    cin >> zahl;
    
    cout << bin << zahl << endl;
    cout << dec << zahl << endl;
    cout << hex << zahl << endl;
    

    aber mir fällt grad ein, ich glaub binäre ausgabe gibts nicht ... aber für den rest müsste es so gehen.



  • [cpp]
    			case 1:
    				cin>>i_deziZahl;
    				while (i_deziZahl > 0);
    				{
    					i_Icount = i_Icount + 1;
    					i_deziZahl /=2;
    					array[i_Icount] = i_deziZahl % 2;
    					cout<<i_deziZahl<<endl;
    				}
    					int o;
    					for (o=1;o<(sizeof(array)/sizeof(array[0]));o++)
    					{
    						cout<<array[o]<<endl;
    					}
    
    			break;
    [/cpp]
    

    kann mir vll einer sagen was hier falsch is? es wird mir immernur nix angezeigt

    ani



  • void dec_to_bin(unsigned long dec, std::string& dest)
    {
    	std::vector<char> vdest;
    	for (; dec >= 1; dec /= 2)
    		vdest.push_back(dec % 2);
    	dest = std::string(vdest.rbegin(), vdest.rend());   
    }
    

    oder so 😉



  • (D)Evil schrieb:

    oder so...

    void dec_to_bin (unsigned long dec, std::string& dest)
    {
        dec>>1 ? dec_to_bin (dec>>1, dest) : 0;
        dest += '0' + (char)(dec & 1); 
    }
    

    🙂



  • hmm, das versteht ich ent agnz, wie gesagtm bin nochz relativ neu in C++.
    könntet ihr das vll n bissl erklärn?
    mgh


Anmelden zum Antworten