Feld mit Dualzahl in Dezimal umrechnen

kanonenfutter90

Grünschnabel
Feld mit Dualzahl in Dezimal umrechnen (und umgekehrt)

Hallo zusammen,

hab schon die Suche bemüht, allerdings helfen mir die dortigen Fragen nicht weiter. Hoffe ihr könnt mir helfen :)

Ich versuch grad zahlen zu konvertieren und scheiter immer wieder an Kleinigkeiten

Also: Ich habe ein Feld mit 100 Stellen (0..99) welches gefüllt ist mit einer beliebigen Dualzahl (z.B. [0,0,0,...,0,1,1,0,1,0,0,1]). Nun möchte ich diese Zahl in einen dezimalen Integer Wert umwandeln.

Dazu übergebe ich in einer Zählschleife den aktuellen Wert des Feldes (1 oder 0) und die aktuelle Position im Feld (von rechts beginnend von 99..0) an meine Konvertierungsfunktion (DualToDez). iDez ist dabei die zu berechnende Dezimalzahl:
PHP:
for(i=99; i>=0; i--)
{
iDez = iDez + DualToDez(iFeld1[i]->GetInhalt(), 99-i);
}
Ich übergebe also an eine Funktion den Inhalt des Feldes an der Stelle 99 bis 0, sowie den Wert 99-i (i = Anzahl der Stelle). So müsste ich also 2^0 + 2^1 usw bekommen.

Aber wie realisiere ich das jetzt in der besagten Funktion? Steh echt aufm Schlauch Wenn jmd. Pseudocode anbieten könnte wäre das echt klasse :)

mfg
 
Zuletzt bearbeitet:
Hallo,

welchen Datentyp besitzt iDez denn? Wenn es ein int ist, wird dein Vorhaben im Allgemeinen scheitern. Ein int ist auch nur eine Binärzahl, die in der Regel über deutlich weniger als 100 Stellen verfügt. Von einer Konvertierung in eine Dezimalzahl kann man dann auch nicht sprechen.

Wenn man dies ignoriert, könnte man die Konvertierung in etwa so durchführen:
C:
iDez = 0;
for (i=0; i<100; i++) {
  iDez = iDez*2 + iFeld1[i]->GetInhalt();
}

Grüße,
Matthias
 
Wow, so einfach hab ich nicht gedacht :) Also dein Code funktioniert wies scheint :D Danke dafür. Macht es denn nun Sinn iDez als long zu deklarieren oder muss ich ganz was anderes nehmen?

Dann gleich zum zweiten Problem:
Wie kann ich einen einfachen Integer Wert zurücktransformieren und in ein solches Feld als Dualzahl schreiben? Ich denke ich muss da irgendwie über Restdivision gehen, muss mich aber erstma genauer damit befassen ;)

mfg
 
Habs doch noch selbst rausgefunden :p

Dezimalzahl umwandeln in Dualzahl (Array):
Code:
iDez = Integer.GibWert();
	i = 99;
	do
	{
		iRest	= iDez % 2;
		iDez	= iDez / 2;

		if( iRest != 0)
		{
			iFeldDD[i]->SetInhalt(1);
		}
		else
		{
			iFeldDD[i]->SetInhalt(0);
		}

		i--;
	}
	while(iDez > 0);

	printf("Dezimalzahl nach Dual : ");
	for(i=0; i<=99; i++)
	{
		printf("%d", iFeldDD[i]->GetInhalt());
	}

Also danke für die Hilfe :)

mfg
 
Zurück