PHP不使用log10判断2的幂 位运算判断逻辑原理解析
PHP判断正整数是否为2的幂的代码逻辑疑问
我是PHP新手,在参加编程挑战时遇到了如下代码片段:
// 用于判断给定的正整数是否为2的幂
解决方案代码如下:
function is_Power_of_two($n) { if(($n & ($n - 1)) == 0) { return "$n 是2的幂"; } else { return "$n 不是2的幂"; } } print_r(is_Power_of_two(4)."\n"); print_r(is_Power_of_two(128)."\n"); print_r(is_Power_of_two(16)."\n");
我想知道上述代码if判断段的逻辑是怎样的?比如当$n=2时:
2 & 2 - 1 == 0 // 用数值替换$n 2 & 1 == 0 ? // 这一判断的结果是什么?
补充说明
我后续了解到,&并不是逻辑运算符,而是位运算符。
位运算符可用于对整数中指定的二进制位进行计算和操作。
我找到了一个非常实用的视频,讲解了位的运行逻辑以及位运算的使用方法。
感谢kollol的帮助,现在我已经理解了这段代码为什么可以正确识别2的幂数值。同时也感谢lars-stegelitz、kiko-software的解答。
内容的提问来源于stack exchange,提问作者winpriv
相关产品推荐
相关产品推荐

