今天跟大家分享位运算的几个使用小技巧,这些巧妙操作都是要在项目开发或者学习中不断积累的,如果你在后续的编码中用上的话,不仅能够提高代码效率,还能为你的代码增色不少。
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。
属实巧妙,不禁有点喜欢上了异或操作运算。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !