PHP 5.3.15 XOR Bug

SkyDevMent

Erfahrenes Mitglied
Guten Abend,
wie ich gerade feststellen muss gibt es entweder einen Bug im XOR von PHP oder ich checke gerade garnichts mehr.;-)

Folgendes habe ich gerade versucht in PHP umzusetzen:
Code:
    0010
xor 1010
  = 1000
So sollte das Ergbniss aussehen.

Wenn ich in PHP das ganze umsätze bekomme ich überhaupt kein Ergbniss oder ein falsches
PHP:
<?php
echo 0010 ^ 1010; 
echo "<br>";
echo '0010' ^ '1010';
?>

Es ist sehr wichtig das die Schreibweise in binärer Form erfolgt, weil mit folgendem Script funktioniert es
PHP:
echo 2^10;

P.S. Alle anderen Operatoren funktionieren wie erwartet
 
So kannst du nicht mit Binärzahlen rechnen, in php, mit führender null werden die zu Oktalzahlen.
PHP:
$a = '0010';
$b = '1010';
echo _xor($a, $b); // 1000
function _xor($a, $b){  
  return substr(decbin(intval($a) ^ intval($b)),-max(strlen($a), strlen($b)));  
}

Mit intval() werden zunächst die führenden Nullen bei $a ignoriert. Anschließend wird dann die XOR-Operation an beiden Zahlen vorgenommen. Mit decbin erzeugen wir daraus eine Binärzahl. Da diese jedoch nur 4 Stellen hat, decbin aber bis zu 32-stellige Binärzahlen liefert, interessieren uns hier nur die letzten 4. Wir suchen uns mit max() also die längste binärzahl aus und holen uns dann mit substr den entsprechenden Teil aus der Binärzahl.
 
Geht doch noch einfacher. Beide bin-Werte in dec-Werte wandeln. XOR anwenden und zurück in Bin-Werte
PHP:
function _xor($a, $b){
    return decbin(bindec($a) ^ bindec($b));
}
 
Hey ihr beiden vielen Dank für eure Lösungen habe mich der Einfachheit halb für Yaslaws Lösung entschieden.

Schade das PHP sich da etwas komisch verhält aber naja, gibt doch schlimmeres.
 
Welche Sprache verhält sich denn anders?
dh. die eine einfach so hingeschriebene Zahl nicht als Dezimalzahl nimmt
(bzw. oft auch Oktal wenn führende Null)?

Eine Sprache, bei der von Haus aus binär geschrieben wird kenn ich nicht
(und nein, nicht mal in Binaries steht 1001 im Asciicode)
 
Zurück