[C] Probs mit einem Binärecode rechner!

TheLamer

Mitglied
Moinsen
also ich habe ein Problem mit einem script was aus einem dualcode ein Dezimal code macht

das heist das man 101 eingiebt und er soll er 5 ausgeben


die rechnung währe schriftlich soo...

wenn die einzelne stelle eine 1 ist
rechne 2 hoch stelle-1

bei ner 0 soll er nichts machen

zum schluss soll er alle ergebnisse zusammen zählen

das ist mein momentaner Stand
Code:
if(m==6)
{

	int erg;
	int x;
	int x2;
	int y;
	char bin[30];
	int q;
	int p;
	int stellen;
	int ergebnis=0;

	printf("Geben sie den Gewuenschten Binaer Code ein\n");
	
	scanf("%s",&bin);
	stellen = strlen(bin);
	printf("stelle %i\n\n\n\n",stellen);
	
	for(x=0; x<stellen; x=x+1)
	{

	printf("%c",bin[x]);
	}
	for(q=1;q<=stellen;q=q+1)
		{
		
	
		p=q-1;

		if(bin[q]!='0')
		{
			
		
		x2 = 2;
		y = q-1;
		
	
		erg = pow(x2,y);
		
		ergebnis = ergebnis + erg;

		}
	
		}

			printf("Ergebnis ist:%i\n",ergebnis);
		//	Sleep(5000);
		//	system("cls");


}

das ding geht im grunde genommen er hat nur extreme probleme mit den nullen
so das er z.b. bei ner 101 ne 6 ausgiebt obwohl es ne 5 ist

noch einmal zur verdeutlichung: bezogen auf 101

stelle 1 von hinten

2 hoch 0 = 1

stelle 2 von hinten
mache nichts
da das eine 0 ist

Stelle 3 von hinten
2 hoch 2 = 4


Ergebnis ist 5
 
dann lasse ihn bei der Null eben auch was machen.
Vielleicht hilfts ja.
Also lies die Stelle aus (1/0) z.B in Variable Stelle
Und dann machst du eben Erg=Stelle*2 hoch pos-1
in der schule hab ich das damals gemacht und das ganze umwandeln war ein Quellcode von max. 15 Zeilen
 
Ich würde das so machen:
Code:
#include <math.h>
#include <stdio.h>
#include <memory.h>

int main(int argc, char **argv)
{
	char bin[32];
	int i;
	unsigned int erg = 0;

	memset(bin, 0, 32);
	printf("Binaere Zahl(max. 32 Zeichen): ");
	scanf("%32[01]c", bin);
	printf("Eingegebene Zahl: %s\n", bin);

	for(i = 0; bin[i] && i < 32; i++) {
		if(bin[i] == '1')
			erg += (unsigned int)pow(2, i);
	}
	printf("Ergebins: %u\n", erg);
	return 0;
}
 
Original geschrieben von frager
Code:
	for(i = 0; bin[i] && i < 32; i++) {
		if(bin[i] == '1')
			erg += (unsigned int)pow(2, i);
	}

So würde ich das eigentlich nicht machen, weil: pow liefert einen double zurück.
Doubles sind eine sehr unsichere Sache, oft und durch einfachste Rechnungen (zb db+=1;) sind sie ungenau.
Es kann gut vorkommen, dass du mit (int)pow(2,3) eine 7 zurückgeliefert bekommst, statt einer 8.

mach lieber:

Code:
int erg = 0;
int i = 0;
while(bin[i])
	(erg<<=1)|=bin[i++]&1;
 
jo das programm geht

ABER

wie kann ich das in eine if schleife einbinden
das arbeitet ja mit zeigern und da habe ich ka


danke für ne rasche antwort
 
Ich verstehe dein Problem nicht ganz. Könntest du mal genauer erklären womit du Probleme hast?
Außerdem gibt es eine "if-schleife" nicht, höchstens einen if-block
 
binaer zahlen

Nur so als Hinweis:
Wenn man mit binaeren Zahlen rechnen will, sollte man immer unsigned int benutzen - da die Vorzeichenkonventionen von int Maschienenspezifisch sind!
 
Zurück