我正在使用我在网上找到的功能。什么&在这个条件中意味着什么?
if ($strength & 8) {
$consonants .= '@#$%';
}
$ strength应该是0-8的数字。该函数打算使用所有$ consonants连接,其中$ strength< 8.(可能解释为什么功能不起作用)。
答案 0 :(得分:4)
单个&
是按位运算符,双&&
是逻辑运算符。 (即,在您的示例中设置了$strength
和8
中设置的位。)这比仅仅说出来要复杂得多,并且需要了解二进制如何工作。
编辑:查看this article以获取有关按位运算符的更多信息。
答案 1 :(得分:3)
&安培;是bitwise operator - 它正在检查是否设置了总共8的位。在这种情况下,1000
答案 2 :(得分:3)
&
是一个按位运算符。它按位组合了两个值。
什么是按位运算符?
每个整数在内部表示为位数。
1 is 0001
2 is 0010
4 is 0100
8 is 1000
等等。每个位的值都是前一个值的两倍。
您可以通过组合位
来获取其他数字3 is 0011 (2+1)
5 is 0101 (4+1)
按位运算适用于两个变量中的每个位。 &
将结果中的每一位设置为1,如果中的值为1,则将其设置为1。
9& 5 == 1
,因为
9 == 1001
5 == 0101
----------
1 == 0001
|将COMBINE全部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_WARNING
和LOG_ALIENATTACK
的组合。您可以使用&
运算符对其进行测试:
if($myLogLevel&LOG_WARNING).... //true
if($myLogLevel&LOG_IO).... //false
if($myLogLevel&LOG_ALIENATTACKS)..../ /true run or your live!!!
如果您想了解有关搜索bitflags和二进制操作的主题的更多信息。