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
在偶数的情况下。它是运算符。您只需要几节:-它是按位运算符,不是数学运算符。我实际上想问哪个选项是最好的(资源方面),答案很好。