Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 奇数和偶数(使用&;or%)_Php_Operators - Fatal编程技术网

Php 奇数和偶数(使用&;or%)

Php 奇数和偶数(使用&;or%),php,operators,Php,Operators,我总是使用以下方法来查找偶数和奇数: if( $num % 2 ) { echo "odd"; } if( !($num % 2) ) { echo "even"; } 但最近我偶然发现了以下代码,它们的工作原理完全相同: if( $num & 1 ) { echo "odd"; } if( !($num & 1) ) { echo "even; } 第二种方法中“&”背后的逻辑是什么 我去检查了,而符号不是选项的一部分 谢谢。是接线员。请记住,在计算机中,每个整

我总是使用以下方法来查找偶数和奇数:

if(   $num % 2  ) { echo "odd"; }
if( !($num % 2) ) { echo "even"; }
但最近我偶然发现了以下代码,它们的工作原理完全相同:

if(   $num & 1  ) { echo "odd"; }
if( !($num & 1) ) { echo "even; }
第二种方法中“&”背后的逻辑是什么

我去检查了,而符号不是选项的一部分

谢谢。

是接线员。请记住,在计算机中,每个整数都以二进制形式存储,最低有效位二进制数字是2^0==1。因此,每个奇数的最低二进制位数为1

因此,按位AND运算符将您的值逐位与常量
1
进行比较。两个操作数中
1
的位在结果中设置为
1
,但两个操作数中
0
的位在结果中设置为
0
。最终结果(将是
1
0
)被PHP强制为布尔值,因为您将其用作
if()
语句中的子句

&
而不是
%
检查平整度有一个很好的理由:速度!
%
运算符需要除法运算,因此可以计算余数,这在计算上比直接比较位要昂贵得多

例如:

$num = 9;                // 9 == 8 + 1 == 2^3 + 2^0 == 1001b
echo (string)($num & 1); // 1001b & 0001b = 0001b - prints '1'

$num = 10;               // 10 == 8 + 2 == 2^3 + 2^1 == 1010b
echo (string)($num & 1); // 1010b & 0001b = 0000b - prints '0'

&
是二进制的

奇数和1的二进制值为1,偶数和1的二进制值为0

这是因为奇数的二进制值总是以1结尾,偶数的二进制值总是以0结尾。所以

10101101&00000001=00000001
对于奇数和


10101100&00000000=00000000
在偶数的情况下。

它是运算符。您只需要几节:-它是按位运算符,不是数学运算符。我实际上想问哪个选项是最好的(资源方面),答案很好。