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

时间:2011-01-07 21:54:04

标签: php operators if-statement bit-manipulation

我正在使用我在网上找到的功能。什么&在这个条件中意味着什么?

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

$ strength应该是0-8的数字。该函数打算使用所有$ consonants连接,其中$ strength< 8.(可能解释为什么功能不起作用)。

3 个答案:

答案 0 :(得分:4)

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

编辑:查看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;

现在$myLogLevelLOG_WARNINGLOG_ALIENATTACK的组合。您可以使用&运算符对其进行测试:

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

如果您想了解有关搜索bitflags和二进制操作的主题的更多信息。