按位运算符的工作原理
How bitwise operator works
我不明白以下代码是如何工作的?
function odd($var){
return ($var & 1);
}
echo odd(4); /* returns and print 0 */
echo odd(5); /* returns and print 1 */
这个函数 returns 如果参数是奇数则为真
如果参数是偶数,则 returns false。 它是如何工作的?
二进制中的奇数的最低有效位 (LSB) 始终为 1。这就是为什么您的代码
function odd($var){
return ($var & 1);
}
returns 奇数为真。以下是您的问题示例:
(decimal) 4 & 1 = (binary) 100 & 001 = (binary) 000 = (decimal) 0 = false
(decimal) 5 & 1 = (binary) 101 & 001 = (binary) 001 = (decimal) 1 = true
另一种思考方式是
100 (decimal 4) - an even number
AND 001 (decimal 1)
= 000 (decimal 0) - return false
和
101 (decimal 5) - an odd number
AND 001 (decimal 1)
= 001 (decimal 1) - return true
它屏蔽掉除 0 以外的所有位。&
是 and 运算符。 1
在二进制中是 000000000001
。所以它就像它的名字一样工作。
按位比较已经说明了它的作用:它逐位比较数字。
如果我们取4位,4的位表示为:0100。5的位表示为0101。当我们将其与&(和)进行比较时,returns这两个位都被设置.
0100 & 0001 = 0000 (no bits are the same)
0101 & 0001 = 0001 (only Least Significant Bit (LSB) is 1)
我不明白以下代码是如何工作的?
function odd($var){
return ($var & 1);
}
echo odd(4); /* returns and print 0 */
echo odd(5); /* returns and print 1 */
这个函数 returns 如果参数是奇数则为真 如果参数是偶数,则 returns false。 它是如何工作的?
二进制中的奇数的最低有效位 (LSB) 始终为 1。这就是为什么您的代码
function odd($var){
return ($var & 1);
}
returns 奇数为真。以下是您的问题示例:
(decimal) 4 & 1 = (binary) 100 & 001 = (binary) 000 = (decimal) 0 = false
(decimal) 5 & 1 = (binary) 101 & 001 = (binary) 001 = (decimal) 1 = true
另一种思考方式是
100 (decimal 4) - an even number
AND 001 (decimal 1)
= 000 (decimal 0) - return false
和
101 (decimal 5) - an odd number
AND 001 (decimal 1)
= 001 (decimal 1) - return true
它屏蔽掉除 0 以外的所有位。&
是 and 运算符。 1
在二进制中是 000000000001
。所以它就像它的名字一样工作。
按位比较已经说明了它的作用:它逐位比较数字。
如果我们取4位,4的位表示为:0100。5的位表示为0101。当我们将其与&(和)进行比较时,returns这两个位都被设置.
0100 & 0001 = 0000 (no bits are the same)
0101 & 0001 = 0001 (only Least Significant Bit (LSB) is 1)