PHP判断两个数字是否是同符号

在这里插入图片描述

问题描述

问题:写一个函数,判断给定的两个数字是否是符号相同的,不可以使用比较运算符或与0比较。

例如 is_same_symbol(-1, 10) == false; is_same_symbol(10,20)=true; is_same_symbol(-1,-10)=true; 同时,规定0属于正数。

方法分装

在二进制表示中,最高位是1的话,就是负数。最高位为0则为正数。因此我可以想办法通过位运算来判断。1 ^0 = 1。所以 负数^正数=负数。其实就是类似于乘法了。


function is_same_symbol($a,$b){
	return (($a ^ $b) > 0);
}

$a=12;
$b=-10;

if (is_same_symbol($a, $b) == true){
    printf ("same symbol");
}else{
    printf ("not same symbol");
}
  • 上面的例子 输出:not same symbol

这里用到了比较运算符(^)。其实完全可以再简化一下,把函数中 >0 的判断比较去掉,因为我们只需要知道第一位符号位即可。


function is_same_symbol($a,$b){
	return !(($a ^ $b) >> 31);
}

右移31位,则只剩下最高位符号位,不是0,就是1。

另外,如果处理非数字型,而是字符串型的数字,如 $a="100.01",$b="-10.01",只需转化成数字型即可。



END


如有问题请在下方留言。

或关注我的公众号“孙三苗”,输入“联系方式”。获得进一步帮助。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值