decbin()は、 10 進数を 2 進数に変換します。これも1 XOR 0 = 1です。
だから、decbin(0) ^ decbin(1)は私に1を与えるはずですが、何も与えていません....なぜですか?
しかし、私が他の操作をしている場合、結果は正しいです...
decbin(0) | decbin(1) => 1
decbin(0) & decbin(1) => 0
decbin(1) & decbin(1) => 1
decbin()は、 10 進数を 2 進数に変換します。これも1 XOR 0 = 1です。
だから、decbin(0) ^ decbin(1)は私に1を与えるはずですが、何も与えていません....なぜですか?
しかし、私が他の操作をしている場合、結果は正しいです...
decbin(0) | decbin(1) => 1
decbin(0) & decbin(1) => 0
decbin(1) & decbin(1) => 1
Decbin は文字列を返しますが、ビット単位の演算子は文字列に対して定義されていません。
質問が編集された後に私のコメントを回答に編集する:
定義されていないということは、それらが文字列に対して意味のある機能を果たさないことを意味し、一見正しい答えが得られないということではありません。他の値を試してみてください。うまくいかないと確信しています。あなたがしなければならないことは、整数に対して操作を行うことです。すべての計算が完了したら、decbin を使用して文字列表現を取得します。バイナリリテラル表現については、他の回答を参照してください。
PHP 5.4+ では、0b
プレフィックスを介してバイナリ構文を利用できます。
$res = 0b00 ^ 0b01
あなたの編集へ:結果は偶然正しいです。指定した値は、文字列にキャストされ、次に数値にキャストされます。より大きな数を使用してみてください。失敗します。ビット演算子は暗黙的に数値にキャストされるため、文字列で失敗することはありません (そうあるべきです)。
通常の整数に対していつでも操作を実行してから、出力をバイナリで表示することができます。
$res = 1 ^ 0;
echo decbin($res);
これも機能します:
$res = 15 ^ 7;
echo decbin($res);