猿问

检查两个数字是否设置了相同的位

我有两个十进制数字。如果设置了任何相同位置的两个位,则比较应返回 true,否则返回 false。例如

  1. 数字1 = 196 = 11000100

  2. number2 = 4 = 00000100

  3. number3 = 16 = 00010000

=> number1 和 number2 的比较将返回 true。

=> number1 和 number3 的比较将返回 false。

=> number2 和 number3 的比较将返回 false。

在 PHP 中,是否有用于此类比较的内置函数,或者我们如何为其编写自定义逻辑?


慕田峪7331174
浏览 111回答 3
3回答

largeQ

从位运算符:$a & $b 并且在 $a 和 $b 中设置的位都被设置。var_dump(196 & 4);var_dump(196 & 16);var_dump(4 & 16);非零的地方0是:falsetrueint(4)int(0)int(0)您可以转换为布尔值true或false:var_dump((bool) (196 & 4));

慕容708150

按位的答案比我的要好得多,但这里是如何在不使用按位运算符的情况下做到这一点:<?phpfunction hasMatchingBits($x, $y)&nbsp;{&nbsp; &nbsp; $x = strrev(decbin($x));&nbsp; &nbsp; $y = strrev(decbin($y));&nbsp; &nbsp; $lengthX = strlen($x);&nbsp; &nbsp; $lengthY = strlen($y);&nbsp; &nbsp; $length = $lengthX < $lengthY ? $lengthX : $lengthY;&nbsp; &nbsp; for ($i = 0; $i < $length; $i++) {&nbsp; &nbsp; &nbsp; &nbsp; if ($x[$i] === '1' && $y[$i] === '1') {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return false;}echo hasMatchingBits(196, 4) ? "Yes\n" : "No\n";echo hasMatchingBits(196, 16) ? "Yes\n" : "No\n";echo hasMatchingBits(4, 16) ? "Yes\n" : "No\n";你可以在这里看到https://3v4l.org/8lSJX

杨__羊羊

使用位运算符:$number1 = 196;$number2 = 4;if ($number1 & $number2){&nbsp; echo "Number 1 and 2 are equal";} else {&nbsp; echo "Number 1 and 2 are not equal";}
随时随地看视频慕课网APP
我要回答