4

私は次のコードを持っています:

print "\n1 & 11\n";
var_dump(1 & 11);

print "\n 2 & 222\n";
var_dump(2 & 222);

なぜ最初の結果が1なのですか?そして、なぜ2番目の結果が2なのですか?

PHP Webサイトは、(2 & 222たとえば)ブール値を返す必要があると言っています。

たとえば、$ a&$ b == trueは等価性を評価し、次にビット単位で評価します。while ($ a&$ b)== trueはビット単位で評価し、次に等価性を評価します。」

わかりません、どうすれ2 & 2222いいですか?

4

3 に答える 3

5

&はビットごとに行いANDます。つまりAND、入力のすべてのビットに対して操作を行います。

バイナリで:

2       = 0000000010
222     = 1011011110
2 & 222 = 0000000010 ( = 2)

&と混同しないでください&&。しばらく&します。bitwise AND&&logical AND

2 && 222 = true
2 &  222 = 2

はどうかと言うと1 & 11

1      = 0001
11     = 1011
1 & 11 = 0001 ( = 1)

そう、1 & 11 = 1

参考文献:

http://en.wikipedia.org/wiki/Binary_and#AND

http://en.wikipedia.org/wiki/AND_gate

于 2012-11-21T09:41:49.170 に答える
3

ビット単位:

  1. 01
  2. 10
  3. 11

演算子は、両方の数値の&すべてのビットを 1 に設定して返します。そう:

  • 1 & 2 -> 01 & 10 -> 00 == 0
  • 2 & 3 -> 10 & 11 -> 10 == 2
于 2012-11-21T09:41:51.970 に答える
0

単一のアンパサンドは、ビットごとの AND 演算子です。
あなたが投稿した引用は、ビット操作と比較を行うときに演算子の優先順位に注意する必要があることを示しています。$a & $b == true特定のビットが $a に設定されているかどうかをテストすることを期待するかもしれませんが、それは次と同等です

$a & (int)($b==true)

var_dump(1&11);またはでビット操作と比較を混在させないので、var_dump(2 & 222);そのメモは気にしないでください。
これは単純なビット単位であり、https://en.wikipedia.org/wiki/Bitwise_operation#ANDで説明されているように

参照:
http://docs.php.net/language.operators.precedence
http://docs.php.net/language.types.type-juggling

于 2012-11-21T09:45:30.677 に答える