取模运算%和按位与&

最近在研究 Redis 源码,发现一些平时不怎么用的编码习惯,感觉挺有趣,记录下

function isOdd1($num) {
    return ($num % 2) == 1;
}

function isOdd2($num) {
    return ($num & 1) == 1;
}

以上两个方法都是用来判断一个数是否为奇数,但是用到的操作符不同,有什么区别 ?

%:取模操作符是基于 十进制(人类思维) 的一种取模方式,如:11 % 4 = 3,常用在各种操作中,可判断奇偶,也可以用在哈希中,如:11 % 8 = 3,落在第 3 个槽中,即 $arr[3-1] 中

&:按位与是基于 二进制 的,如:11 & 1 = 00001011 & 00000001 = 1,常用在 哈希 中,如计算出的 哈希 值为 11,哈希槽个数为 8,则 11 & (8-1) = 00001011 & 00000111 = 00000011 = 2,即 $arr[2] 中

虽然只是符号的差别,但是性能差距还是蛮大的,有 10 倍的差距(可能体现不明显),但有如下好处:

1.积少成多,如果处处都追求这种高效的方式,整体代码质量可能也会更高,放到 C 语言也是如此,像 Redis 这种追求超高性能的软件,一定会用位运算的

2.如果别人看到了你的代码是这样,一定会觉得有点高大上的,毕竟一般很少有人用

但也有坏处:

1.由于非人类语言,所以有可能用出错误

2.别人看你的代码,有可能需要绕个弯才能懂

哈哈~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值