跟大家分享位运算的几个使用小技巧

今天跟大家分享位运算的几个使用小技巧,这些巧妙操作都是要在项目开发或者学习中不断积累的,如果你在后续的编码中用上的话,不仅能够提高代码效率,还能为你的代码增色不少。
1、替代乘除2
这一点应该是基本操作了,我也在往期的文章中提到过多次。
特别是常用定点mcu的朋友,相信一点更是有自己的领悟,即使所使用的mcu带有硬件浮点运算功能,采用整形定点运算也经常用来提高运算速度。
2、异或交换两数
也就是我们面试题中常提到的,不用第三个变量交换两个数:
3、判断两数是否同号
大部分朋友判断两个不为0的数是否同号都是采用两数相乘是否>0来进行判断,当然我也见过如下写法的:
虽然两种最终的结果,但总让人觉得有点太初级、太累赘的感觉,所以代码还是要写得优雅,才让人觉得你有点东西。
如果你稍加处理借用异或运算来进行判断,会给人眼前一亮的感觉。
然而更重要的是相对乘法运算,其速度更快。
4、判断奇偶数
判断奇偶数无非就是识别该数是否能够被2整除,通常我们采用如下表达式:
既然本文介绍位运算,又存在某种位运算会更加高效:
其无非就是利用了奇偶整形数的二进制最后一位是否为1来进行区分。
4、实现绝对值
实现绝对值还不简单?abs用起来。
如果要不用条件语句实现绝对值功能,你会如何实现呢?
以8位整形数为例说明一下其实现,其他字长的整形类似处理:
这里也算是异或的应用吧,异或操作相同为0,相异为1,假如a是一个有符号正数整数,a^0仍然为a,所以如上表达式对于整数仍然为原数。
而当a是一个有符号负值整形数,要实现abs功能,势必要“对原数取反+1“,然而巧妙的是a^0xff刚好是对a取反,-(a>>7)则刚好是+1。
属实巧妙,不禁有点喜欢上了异或操作运算。


人工智能与智能制造的产业融合,正在为多个领域带来变化和发展前景
iOS10.2.1正式版发布:新增多个重磅功能
信号放大器在没有网络的情况能不能用?
接地电阻安全阻值是多少?防雷接地电阻是多少?
多点悬浮触控技术将掀起一场新革命
跟大家分享位运算的几个使用小技巧
LG手机或将消亡 高傲的性格导致定位不准确
魅族要在千元机上实现全面屏?或许就是10天后的魅蓝E2了
虚拟现实中的“存在感”及PowerVR GPU发挥的作用
为电动汽车实现更安全、更快速的直流充电
tcp报文格式详解
基尔霍夫电流定律公式以及含义
苹果终于回应反垄断举报:大部分中国app得到及时通过
对于指纹锁而言,它的好坏该如何分辨
了解PCB功能和术语
比较器选型指南
2019年8月智能手机出货量同比下降2.8%,Android手机占比94.7%
LED发光二极管焊接技术要求
焊接外观缺陷种类_形成原因及预防措施
关于SPI基本知识和工作原理及硬件电路设计浅析