0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至配饺子 来源:最后一个bug 作者:bug菌 2022-07-28 11:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

1、替代乘除2

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

poYBAGLh_p-AImFvAAA2W5GUlrE647.png

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

2、异或交换两数

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

pYYBAGLh_riAS7SuAAAifY87VMI082.png

3、判断两数是否同号

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

pYYBAGLh_tGAIYCpAAAl5rOKOVI627.png

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

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

poYBAGLh_uKAQV2tAAAO2YTQSA0647.png

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

4、判断奇偶数

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

pYYBAGLh_vmAEkGqAAANv2fRzT8353.png

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

poYBAGLh_yWAEqzlAAARc6-maaI723.png

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

4、实现绝对值

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

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

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

poYBAGLh_z2AIu5OAAAU1x_YFBQ428.png

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

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

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



审核编辑:刘清

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

    关注

    147

    文章

    19134

    浏览量

    404057
  • 位运算
    +关注

    关注

    0

    文章

    17

    浏览量

    8677
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SN系列4二进制全加器:快速进位的高效之选

    SN系列4二进制全加器:快速进位的高效之选 引言 在电子电路设计领域,加法器是实现算术运算的基础组件,其性能直接影响到整个系统的运算速度和效率。TI的SN系列4二进制全加器(SN5
    的头像 发表于 04-23 13:05 111次阅读

    74F583 4BCD加法器:高速运算的理想之选

    74F583 4BCD加法器:高速运算的理想之选 在电子设计领域,加法器是实现数字运算的基础组件。今天要给大家介绍的是Fairchild Semiconductor推出的74F583
    的头像 发表于 04-10 16:40 145次阅读

    74F182 进位超前发生器:高速运算的核心助力

    。 文件下载: 74F182PC.pdf 一、器件概述 74F182 是一款高速进位超前发生器,通常与 74F181 或 74F381 4 算术逻辑单元(ALU)配合使用,能为超过 4 字长的运算提供高速超前进位功能。这意味
    的头像 发表于 04-10 14:15 152次阅读

    74F181 4算术逻辑单元:高速运算的得力助手

    74F181 4算术逻辑单元:高速运算的得力助手 在电子设计领域,算术逻辑单元(ALU)是实现数据运算和逻辑操作的核心组件。今天,我们来深入探讨一下Fairchild Semiconductor
    的头像 发表于 04-10 14:15 153次阅读

    LT1468:高性能16精度运算放大器的深度剖析

    LT1468:高性能16精度运算放大器的深度剖析 在电子工程师的日常设计工作中,运算放大器是不可或缺的基础元件。今天,我们要深入探讨的是Linear Technology公司的LT1468——一款
    的头像 发表于 01-28 10:25 302次阅读

    高速低失真运算放大器MAX4432:技术特性与应用指南

    高速低失真运算放大器MAX4430 - MAX4433:技术特性与应用指南 在电子设计领域,高速、高精度且低失真的运算放大器一直是工程师们追求的目标。今天要给大家介绍的MAX4430
    的头像 发表于 01-27 15:40 278次阅读

    什么是

    有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制。 例如在存放一个开关量时,只有0和1 两种状态, 用一二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种
    发表于 12-15 08:07

    芯片AES硬件运算单元好用吗?

    我看好多芯片都支持AES硬件运算单元,感觉用起来的却没有几个,不知道芯源这方面是不是和其他芯片的AES硬件一样呢?我也想知道,这种硬件单元一般用在哪个场合比较多呢
    发表于 12-03 06:27

    单片机位数的思考(8、16、32

    8、16、32是指单片机的“字长”,也就是一次运算中参与运算的数据长度,这个位是指二进制
    发表于 11-21 08:31

    定点数表示实数的方法以及定点数在硬件上的运算验证

    本篇主要介绍定点数表示实数的方法以及定点数在硬件上的运算验证 为什么选定点数 32单精度浮点数: 32的单精度浮点数为例,IEE754标准规定,一个flaot类型的浮点数X可以
    发表于 10-28 08:13

    卷积运算分析

    卷积运算的基础运算是乘加运算(MAC,Multiplication and Accumulation),本文设计了基本运算单元PE模块来实现MAC
    发表于 10-28 07:31

    浮点数是如何实现开平方运算

    一些特殊处理。 浮点数开平方运算可以表达为以下公式: 这里的符号是逻辑零,这意味着平方根块总是期望正浮点数。平方根运算只在尾数部分进行,这可以通过任意一种平方根算法来实现。指数部分除以2,也就是右移
    发表于 10-24 08:42

    浮点运算单元的设计和优化

    浮点运算单元的设计和优化可以从以下几个方面入手: 1.浮点寄存器设计:为了实现浮点运算指令子集(RV32F或者RV32D),需要添加一组专用的浮点寄存器组,总共需要32个通用浮点寄存器。其中
    发表于 10-22 07:04

    risc-v中浮点运算单元的使用及其设计考虑

    的应用。 在RISC-V中,浮点运算单元分为单精度浮点数(32)和双精度浮点数(64),通常包括以下几种基本功能: 加法器/减法器:用于执行浮点数的加减运算。 乘法器:用于执行浮点
    发表于 10-21 14:46

    优化boot4的乘法运算周期

    可以在不同的时钟周期内完成,从而并行化运算流程,提高乘法器的运算性能。 采用多级压缩:在Boot4乘法器中,使用了基于连乘算法的多级压缩技术。可以通过增加多级压缩,进一步降低管理乘法器宽度的开销,提升性能。 优化算法:在寻找算
    发表于 10-21 13:17