Denkproblem mit Binärcode?

Kerwin

Erfahrenes Mitglied
Hallo,

Ka ob man es binärcode nennt oder nicht, hir mal mein kleines Problem
Habe dieses System gewählt, weil dadurch keine zweideutigkeiten enthalten sein können.

Ich habe Beispielsweise 5 Zustände
01 Inhalt 1
02 Inhalt 2
04 Inhalt 3
08 Inhalt 4
16 Inhalt 5

Nun habe ich ein Objekt was diese einzelnen Inhalte enthält(jeder Inhalt kann nur einmal vorkommen).
Bsp
Objekt hat den Inhalt 2(2), 3(4) und 5(16). Dies ergibt dann nach dem muster die Zahl 22.

Wie kann ich das nun umgekehrt machen, also wenn ich die Zahl 21 habe weiß, woraus das Objekt besteht?

Oder ist das ein schlechtes System?
 
Du könntest erst einmal mittels decbin die dezimale Zahl in eine binäre konvertieren, und anschließend die einzelen Positionen abfragen.
 
Hab ich mir auch schon so in etwa gedacht gehabt, nur sehe ich darin ein kleines Problem.
Die Inhaltsliste kann ja immer erweitert werden, sprich bis weit über bsp 268.288(1000001100000000000).
Ich kann doch dann nicht mehr dynamisch ermitteln woraus das produkt nun besteht. Oder hast du dafür evtl ne nette Funktion/Schleife etc?

edit.
Vielleicht die länge des Binärcodes auslesen(19 Stellen). Ist das aber effektiv?
PHP:
$bin=1000001100000000000;
for($i=count($bin);$i<=0;$i--){
  if($bin{$i}!=0) echo'Produkt besteht aus Inhalt '.$i.'<br>';
}
 
Zuletzt bearbeitet:
Mit count geht das natürlich nicht, strlen ist mir da gradnet eingefallen ^^.
So, atm mache ich das wie folgt und auch ganz gut. Wenn jemand noch einen anderen/besseren Algo weiß, immer raus damit ^^

Zum script. Ich lese die länge der zeichenkette aus und durchlaufe die Schleife mit dem $bin von hinten angefangen. $j vari deswegen, weil ich von hinten anfange und dort der Inhalt 1 ist. Nehme ich da $i, haut das ja net hin, weil ich i jedesmal abziehe und dann an erster Stelle der Zeichenkette den wert "Inhalt 0".
PHP:
  $code=22;
  $bin=decbin($code); 
  echo $bin.'<br>';
  for($i=strlen($bin),$j=0;$i>=0;$i--, $j++){ 
    if($bin{$i}==1) echo'Produkt besteht aus Inhalt '.$j.'<br>'; 
  }
 
Zuletzt bearbeitet:
Nochmal in aller Deutlichkeit, da das anscheinend manchen noch nicht klar ist... [phpf]decbin[/phpf] wandelt keine dezimalen in binäre Zahlen um (was immer das auch sein soll). Der Rechner arbeitet intern nur mit binären Darstellungen der Zahlen. Also ist jeder Integer (auch in PHP) eine "binäre Zahl". Nur wenn man sie bspw. per echo ausgibt, wird eine dezimale Darstellung der Zahl als String errechnet. [phpf]decbin[/phpf] macht jetzt nichts anderes, als eine binäre Darstellung der Zahl als String zurückzugeben.

Ein Code, der ohne [phpf]decbin[/phpf] auskommt, wäre z.B.:
PHP:
$code = 22;

$bits = floor(log($code) / log(2));

for ($i = 0; $i <= $bits; ++$i) {
	if ($code & (1 << $i)) {
		echo 'Produkt besteht aus Inhalt '.$i.'<br />';
	}
}
 
Zurück