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

描述

今天跟大家分享位运算的几个使用小技巧,这些巧妙操作都是要在项目开发或者学习中不断积累的,如果你在后续的编码中用上的话,不仅能够提高代码效率,还能为你的代码增色不少。

1、替代乘除2

这一点应该是基本操作了,我也在往期的文章中提到过多次。

mcu

特别是常用定点MCU的朋友,相信一点更是有自己的领悟,即使所使用的MCU带有硬件浮点运算功能,采用整形定点运算也经常用来提高运算速度。

2、异或交换两数

也就是我们面试题中常提到的,不用第三个变量交换两个数:

mcu

3、判断两数是否同号

大部分朋友判断两个不为0的数是否同号都是采用两数相乘是否>0来进行判断,当然我也见过如下写法的:

mcu

虽然两种最终的结果,但总让人觉得有点太初级、太累赘的感觉,所以代码还是要写得优雅,才让人觉得你有点东西。

如果你稍加处理借用异或运算来进行判断,会给人眼前一亮的感觉。

mcu

然而更重要的是相对乘法运算,其速度更快。

4、判断奇偶数

判断奇偶数无非就是识别该数是否能够被2整除,通常我们采用如下表达式:

mcu

既然本文介绍位运算,又存在某种位运算会更加高效:
 

mcu

其无非就是利用了奇偶整形数的二进制最后一位是否为1来进行区分。

4、实现绝对值

实现绝对值还不简单?abs用起来。

如果要不用条件语句实现绝对值功能,你会如何实现呢?

以8位整形数为例说明一下其实现,其他字长的整形类似处理:

mcu

这里也算是异或的应用吧,异或操作"相同为0,相异为1",假如a是一个有符号正数整数,a^0仍然为a,所以如上表达式对于整数仍然为原数。

而当a是一个有符号负值整形数,要实现abs功能,势必要“对原数取反+1“,然而巧妙的是a^0xFF刚好是对a取反,-(a>>7)则刚好是+1。

属实巧妙,不禁有点喜欢上了异或操作运算。



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分