为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕田峪7331174 2022-07-16 17:41:21
我有两个十进制数字。如果设置了任何相同位置的两个位,则比较应返回 true,否则返回 false。例如数字1 = 196 = 11000100number2 = 4 = 00000100number3 = 16 = 00010000=> number1 和 number2 的比较将返回 true。=> number1 和 number3 的比较将返回 false。=> number2 和 number3 的比较将返回 false。在 PHP 中,是否有用于此类比较的内置函数,或者我们如何为其编写自定义逻辑?
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超8个赞

从位运算符:


$a & $b 并且在 $a 和 $b 中设置的位都被设置。


var_dump(196 & 4);

var_dump(196 & 16);

var_dump(4 & 16);

非零的地方0是:falsetrue


int(4)

int(0)

int(0)

您可以转换为布尔值true或false:


var_dump((bool) (196 & 4));


查看完整回答
反对 回复 2022-07-16
?
慕容708150

TA贡献1831条经验 获得超4个赞

按位的答案比我的要好得多,但这里是如何在不使用按位运算符的情况下做到这一点:


<?php



function hasMatchingBits($x, $y) 

{

    $x = strrev(decbin($x));

    $y = strrev(decbin($y));

    $lengthX = strlen($x);

    $lengthY = strlen($y);

    $length = $lengthX < $lengthY ? $lengthX : $lengthY;


    for ($i = 0; $i < $length; $i++) {

        if ($x[$i] === '1' && $y[$i] === '1') {

            return true;

        }

    }


    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


查看完整回答
反对 回复 2022-07-16
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

使用位运算符:


$number1 = 196;

$number2 = 4;


if ($number1 & $number2){

  echo "Number 1 and 2 are equal";

} else {

  echo "Number 1 and 2 are not equal";

}


查看完整回答
反对 回复 2022-07-16
  • 3 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号