eine funktion binär -> dezimal



  • Windalf schrieb:

    ...oder einfach selber schreiben....

    darum geht es ja, ich hab keine ahnung, wie....



  • ich sag ja entweder unsportlich sscanf verwenden und die sache ist gegessen oder mal die suchfunktion verwenden

    http://www.c-plusplus.net/forum/viewtopic.php?t=83968&start=10
    http://www.c-plusplus.net/forum/viewtopic.php?t=83659&start=0

    an sonsten ist umwandeln ja auch nur 2 hoch aktuelle stelle... und alle stellen aufaddieren und fertig ist die sache... steht aber auch alles in dem beiden links drin wie mans machen kann...



  • hm, un wie funktioniert das mit dem sscanf?

    es müsste auch in C sein, C++ ist leider nicht möglich.

    ah, danke, hab eben erst dein edit gesehen, ich versuchs mal...



  • sscanf geht nur wenn du den spass in hex vorliegen hast aber nehmen wir mal an du hast ein char-arry von nullen und einsen...

    nehmen wir mal an x setzt du am anfang auf 0...
    jetzt brauchst du doch nur in ner schleife durchgehen...

    char *p; //halt der zeiger auf das array das die 0 und 1 enthält

    for(x=0; *p;++p)
    x=2*x + *p-'0'; //oder halt schiften statt mal 2... wenn du direkt 0 und 1 und nicht '0' und '1' gespeichert hast entspechend nicht '0' abziehen
    

    wenn das feld nicht nullterminiert ist dann nicht *p als abbruchbedinung sondern einen zähler mitlaufen lassen



  • jo, vielen dank, ich habs jetzt so gelöst:

    int bindec(char* bin)
    {
    	int i, r=0;
    
    	for (i=0; i<8; i++)
    	{
    		r += (bin[i]-'0')*(int)pow(2, 7-i);
    	}
    
    	return r;
    }
    


  • Och menno, nicht schon wieder pow. Schau dir lieber mal die Shift Operatoren (<<,>>) an.

    Herr-Vorragend schrieb:

    es müsste auch in C sein, C++ ist leider nicht möglich

    Wieso postest du dann nicht ins C Forum?



  • oh, hab ganz übersehen, dass es sowas gibt, sorry 🙂

    aber das mit den Shift-Operatoren hab ich eh noch nie verstanden...



  • Hi,

    die shift-Operatoren schieben einfach alle Bits hin- und her.
    Beispiel:

    0101 0010 b << 1 = 1010 0100
    1100 0000 b >> 1 = 0110 0000

    Shift rechts teilt die Zahl gewissermaßen durch 2 und ein Shift nach links verdoppelt die Zahl.
    Wenn du um 2 nach links shiftest, dann vervierfacht sich die Zahl:

    Zahl << n = Zahl*2^n
    Zahl >> n = Zahl/2^n

    Funktioniert natürlich nur für Zweierpotenzen, aber für die ist das deutlich schneller als pow, weil pow, soweit ich weiß, sogar über die Exponentialfunktion die Zahlen berechnet. D.h. sogar für ganzzahlige Exponente ist eine selbstgeschriebene Funktion schneller und für diese 2er-Potenzen gibt es natürlich noch eine Geschwindigkeitsgewinnung.

    MfG Eisflamme

    EDIT: Korrektur



  • hui, danke, jetzt versteh ich das auch mal. Also vielen dank.

    Doch ich kapier immer noch nicht wie der &- und der |-Operator funktioniert *räusper* *räusper* 🙂



  • & (and), | (or) und ^ (xor) sind Operatoren für bitweise Verknüpfung. Dh zwei Operanden werden Bit für Bit durchlaufen und entsprechend verknüpft. Dabei gelten folgende Regeln

    0 & 0 = 0
    0 & 1 = 0
    1 & 0 = 0
    1 & 1 = 1

    0 | 0 = 0
    0 | 1 = 1
    1 | 0 = 1
    1 | 1 = 1

    0 ^ 0 = 0
    0 ^ 1 = 1
    1 ^ 0 = 1
    1 ^ 1 = 0

    Das alles kannst du aber auch in einem entsprechenden Tutorial oder guten C/C++ Buch nachlesen.

    Ergänzung zu Mis2com's Beitrag:
    Shift Operatoren sollten möglichst auf unsigned Operanden angewendet werden, da signed Operanden negativ werden können und dann ist das Verhalten implementationsspezifisch.


Anmelden zum Antworten