PHP if语句问题(&;运算符)

PHP if语句问题(&;运算符),php,operators,if-statement,bit-manipulation,Php,Operators,If Statement,Bit Manipulation,我正在使用我在网上找到的一个函数。在这个条件中,&是什么意思 if($strength&8){ $consonates.='@#$%'; } $strength应该是一个0-8的数字。函数打算使用$strength

我正在使用我在网上找到的一个函数。在这个条件中,&是什么意思

if($strength&8){
$consonates.='@#$%';
}


$strength应该是一个0-8的数字。函数打算使用$strength<8的所有$consonators连接。(可能解释函数不工作的原因)。

单个
&
是按位运算符,双
&
是逻辑运算符。(即,在您的示例中设置了
$strength
8
中设置的位。)这比只说这些要复杂得多,需要了解二进制如何工作


编辑:有关按位运算符的详细信息,请查看。

&是一个-它正在检查是否设置了总计为8的位。在这种情况下,
1000
&
是位运算符。它按位组合两个值

什么是位运算符?

每个整数在内部表示为若干位

1 is 0001
2 is 0010
4 is 0100
8 is 1000
等等。每一位的值都是前一位值的两倍

您可以通过组合位获得其他数字

3 is 0011 (2+1)
5 is 0101 (4+1)
按位操作对两个变量中的每一位都有效<代码>&将结果中的每一位设置为1,前提是它所操作的两个值都是1

9&5==1

因为

9 == 1001
5 == 0101
----------
1 == 0001
|将合并所有1:

3 | 5==7

3 == 0011
5 == 0101
---------
7 == 0111
你怎么用它

例如:

define('LOG_WARNING',1);
define('LOG_IO',2);
define('LOG_ALIENATTACKS,4);

$myLogLevel = LOG_WARNING | LOG_ALIENATACKS;
现在,
$myLogLevel
LOG\u警告
LOG\u警告
的组合。您可以使用
&
操作符对其进行测试:

if($myLogLevel&LOG_WARNING).... //true
if($myLogLevel&LOG_IO).... //false
if($myLogLevel&LOG_ALIENATTACKS)..../ /true run or your live!!!

如果您想了解更多关于主题的信息,请搜索位标志和二进制操作。

haha。。该死,在我的答案中添加链接花了我额外的几秒钟;)很好的解释可能重复,但在写答案时请花时间检查拼写。