Bitmuster: Fehler bei Vergleich

crazyPower

Mitglied
Hallo,

ich bin etwas verwirrt. Ich habe folgenden Code:
PHP:
$result=array("ZUGRIFF" => array(0=>3333));
print_r($result);
echo "<br>";
for ($i=0; $i<17; $i++){
if($result['ZUGRIFF'][0] & $i){
echo "$i: checked\n<br>";
}
}
echo base_convert($result['ZUGRIFF'][0], 10, 2);

Und das hier als Ausgabe:
HTML:
Array ( [ZUGRIFF] => Array ( [0] => 3333 ) ) 
1: checked 
3: checked 
4: checked 
5: checked 
6: checked 
7: checked 
9: checked 
11: checked 
12: checked 
13: checked 
14: checked 
15: checked 
110100000101

Eigentlich dürfte er doch in diesem Fall nur bei 0, 2, 8, 10, 11 ein "checked" bringen.
Die Bits 1, 3, 5, 6, 7, 9, 11, 12, 13, 14, 15 sind doch bei der Dezimalzahl 3333 garnicht gesetzt. Wenn sie gesetzt wären, müsste das die Dezimalzahl 64250 sein....

ein etwas verwirrter

cP
 
die folgende Bedingung trifft bis auf den ersten durchlauf der Schleife immer zu:

PHP:
<?
....
if($result['ZUGRIFF'][0] & $i){
.....
?>
da der Wert von
PHP:
$result['ZUGRIFF'][0]
bei jedem Durchlauf der Schleife 3333 bleibt, darum zeigt deine Schleife bei jedem durchlauf (bis auf den ersten) immer checked an.

Was soll denn dieses Skriptes machen?
 
Hallo,
er soll einen binär-Vergleich machen.

Code:
1. Durchlauf:
prüfe ob in der binären Darstellung von 3333 das Bit 2^0 gesetzt ist
 
2. Durchlauf:
prüfe ob in der binären Darstellung von 3333 das Bit 2^1 gesetzt ist
 
3. Durchlauf:
prüfe ob in der binären Darstellung von 3333 das Bit 2^2 gesetzt ist
 
usw....

cu

cP
 
Zurück