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

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

3天内不再提示

一文详解嵌入式位运算

CHANBAEK 来源:南山府嵌入式 作者:编外人员 2023-04-13 15:53 次阅读

叙述:

嵌入式位运算是嵌入式系统中常用的优化技巧之一,它可以通过位运算操作来实现一些常见的数学运算、逻辑运算等,从而提高程序的执行效率。

本文就这方面进行介绍。

我个人认为,位操作就是取、删、反、移位、清空、切换等这些,但是在实际中因为对这方面的理解不够透彻,导致在写代码时,不知道怎么操作。

位移运算

位移运算包括左移运算和右移运算,通过将二进制数的位向左或向右移动指定的位数,可以实现快速的乘以或除以2的幂次方操作。 例如,将一个整数向左移动3位,相当于将其乘以2的3次方(即8),将一个整数向右移动2位,相当于将其除以2的2次方(即4)。

1int x = 10;  // 声明一个整数变量 x,初始值为 10
2int y = x << 3;  // 将 x 左移 3 位,相当于乘以 8
3int z = x >> 2;  // 将 x 右移 2 位,相当于除以 4

位与运算

位与运算是对两个数的每个二进制位进行逻辑与操作,如果两个相应的二进制位都为1,则该位的结果为1,否则为0。 位与运算常用于掩码操作、判断奇偶性等。

1int x = 0x0F;  // 声明一个整数变量 x,初始值为 0x0F(二进制为 0000 11112int y = 0x03;  // 声明一个整数变量 y,初始值为 0x03(二进制为 0000 00113int z = x & y;  // 对 x 和 y 进行位与运算,结果为 0000 0011(十进制为 3

位或运算

位或运算是对两个数的每个二进制位进行逻辑或操作,如果两个相应的二进制位中至少有一个为1,则该位的结果为1,否则为0。 位或运算常用于设置标志位、合并掩码等。

1int x = 0x0F;  // 声明一个整数变量 x,初始值为 0x0F(二进制为 0000 11112int y = 0x03;  // 声明一个整数变量 y,初始值为 0x03(二进制为 0000 00113int z = x | y;  // 对 x 和 y 进行位或运算,结果为 0000 1111(十进制为 15

位异或运算

位异或运算是对两个数的每个二进制位进行逻辑异或操作,如果两个相应的二进制位不相同,则该位的结果为1,否则为0。 位异或运算常用于取反标志位、差分数据传输等。

1int x = 0x0F;  // 声明一个整数变量 x,初始值为 0x0F(二进制为 0000 11112int y = 0x03;  // 声明一个整数变量 y,初始值为 0x03(二进制为 0000 00113int z = x ^ y;  // 对 x 和 y 进行位异或运算,结果为 0000 1100(十进制为 12

位取反运算

位取反运算是对一个数的每个二进制位进行逻辑取反操作,即将1变为0,0变为1。 位取反运算常用于反转标志位、取反掩码等。

1int x = 0x0F;  // 声明一个整数变量 x,初始值为 0x0F(二进制为 0000 11112int y = ~x;  // 对 x 进行位取反运算,结果为 1111 0000(十进制为 -16

位域操作

位域是一种将一个或多个字段打包到一个单一的机器字中的数据结构。 位域可以有效地压缩存储空间,并且可以提高程序的执行效率。 位域常用于控制寄存器、状态寄存器等。

1struct {
2    unsigned char a : 4;  // 定义一个 4 位的无符号整数字段 a
3    unsigned char b : 3;  // 定义一个 3 位的无符号整数字段 b
4    unsigned char c : 1;  // 定义一个 1 位的无符号整数字段 c
5} bitfield;
6
7bitfield.a = 5;  // 设置字段 a 的值为 5(二进制为 01018bitfield.b = 2;  // 设置字段 b 的值为 2(二进制为 0109bitfield.c = 1;  // 设置字段 c 的值为 1(二进制为 1

清除位:

可以使用位运算符将特定的位设置为0。 例如,如果需要清除一个8位字节的最高位,可以使用以下代码:

1unsigned char byte = 0xFF;
2byte &= 0x7F; // Clear the highest bit

设置位:

可以使用位运算符将特定的位设置为1。 例如,如果需要将一个8位字节的第4位设置为1,可以使用以下代码:

1unsigned char byte = 0x00;
2byte |= 0x10; // Set the 4th bit

反转位:

可以使用位运算符将特定的位取反。 例如,如果需要反转一个8位字节的所有位,可以使用以下代码:

1unsigned char byte = 0x55;
2byte ^= 0xFF; // Invert all bits

检查位:

可以使用位运算符检查特定的位是否设置为1或0。 例如,如果需要检查一个8位字节的第2位是否为1,可以使用以下代码:

1unsigned char byte = 0x04;
2if (byte & 0x02) {
3    // The 2nd bit is set
4} else {
5    // The 2nd bit is not set
6}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288465
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117723
  • 二进制
    +关注

    关注

    2

    文章

    705

    浏览量

    41250
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66771
  • 位运算
    +关注

    关注

    0

    文章

    16

    浏览量

    8383
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux应用程序开发详解

    只是推广嵌入式Linux应用程序开发详解
    发表于 12-20 14:17

    嵌入式WEB服务器及远程测控应用详解

    嵌入式WEB服务器及远程测控应用详解
    发表于 11-18 15:58

    嵌入式Linux系统开发技术详解——基于ARM

    嵌入式Linux系统开发技术详解——基于ARM,共6个部分,给大家参考
    发表于 06-24 21:19

    嵌入式学习路线 嵌入式学习路线详解

    `  嵌入式学习是近年来直很热门的个话题,从当年的不温不火到如今炽手可热,嵌入式开发技术可谓是十年磨剑,终于等到炉火纯青。据各大培训机构数据整理分析得出,咨询和参加
    发表于 03-17 18:05

    嵌入式Linux应用程序开发详解

    嵌入式Linux应用程序开发详解
    发表于 01-24 16:58

    ARM嵌入式Linux系统开发详解

    了Linux技术的*发展,全部采用当前最流行和稳定的Linux发行版或者相关工具,是Linux爱好者学习Linux的好帮手。《Linux典藏大系:ARM嵌入式Linux系统开发详解(第2版)》是获得了
    发表于 09-14 08:57

    ARM嵌入式Linux系统开发详解

    ARM嵌入式Linux系统开发详解
    发表于 05-08 08:25

    ARM嵌入式Linux系统开发详解

    ARM嵌入式Linux系统开发详解
    发表于 05-19 10:20

    ARM嵌入式的GPIO绑定的计算方式详解

    ARM嵌入式的GPIO绑定的计算方式详解
    发表于 12-14 06:38

    嵌入式C基础知识知识点汇总

    前言本人今天刚开始学stm32,嵌入式C是stm32学习的基础,先贴张嵌入式开发的技能树:运算C语言中的
    发表于 12-15 09:04

    嵌入式C语言运算的相关资料推荐

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档@[TOC]嵌入式C语言的运算、pandas是什么?1.与运算“&” 按
    发表于 12-15 07:22

    运算嵌入式编程制转换

    程序员面试宝典笔记4-运算嵌入式编程制转换嵌入式编程static
    发表于 12-21 08:16

    单片机简单流水灯运算应用嵌入式的相关资料分享

    单片机简单流水灯运算应用嵌入式用到位运算符C51语言能对运算对象按进行操作,它与汇编语言使用
    发表于 12-24 07:10

    嵌入式单片机开发中的常用运算有哪些

    嵌入式单片机开发中的常用运算有哪些?
    发表于 01-19 06:55

    嵌入式详解

    嵌入式详解(stm32嵌入式开发实例)-嵌入式详解,有需要的可以参考!
    发表于 07-30 16:07 64次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>详解</b>