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

    关注

    5068

    文章

    19008

    浏览量

    302962
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119977
  • 二进制
    +关注

    关注

    2

    文章

    792

    浏览量

    41592
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68324
  • 位运算
    +关注

    关注

    0

    文章

    16

    浏览量

    8413
收藏 人收藏

    评论

    相关推荐

    ARM嵌入式Linux系统开发详解

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

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

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

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

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

    运算嵌入式编程制转换

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

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

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

    嵌入式liunx开发技术详解

    嵌入式liunx开发技术详解主要内容本书以嵌入式Linux 系统开发流程为主线,剖析了嵌入式Linux 系统构建的各个环节。从嵌入式系统基础
    发表于 03-04 16:58 55次下载

    嵌入式系统的知识平台与平台模式详解

    嵌入式系统的知识平台与平台模式详解 知识经济的时代是个以知识平台为中心的市场经济时代。嵌入式系统领域的产业、科技,已从资本经济时代封闭
    发表于 03-29 15:09 922次阅读

    嵌入式Linux内核移植详解(顶嵌)

    嵌入式内核移植步骤详解 含配置含义及内容等方面
    发表于 11-20 16:00 19次下载

    ARM嵌入式Linux系统开发详解

    ARM嵌入式Linux系统开发详解,供大家参考。
    发表于 03-17 14:18 58次下载

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

    基于嵌入式Linux应用程序开发详解
    发表于 10-25 14:17 12次下载
    基于<b class='flag-5'>嵌入式</b>Linux应用程序开发<b class='flag-5'>详解</b>

    详解嵌入式linux 启动信息

    详解嵌入式linux 启动信息
    发表于 10-30 10:28 11次下载
    <b class='flag-5'>详解</b><b class='flag-5'>嵌入式</b>linux 启动信息

    了解嵌入式

    嵌入式系统是种专用的计算机系统,作为装置或设备的部分。通常,嵌入式系统是个控制程序存储在ROM中的
    发表于 02-12 09:33 5674次阅读

    嵌入式详解

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

    (网盘)ARM嵌入式Linux系统开发详解

    (网盘)ARM嵌入式Linux系统开发详解(python嵌入式开发 - csdn博客)-(网盘)ARM嵌入式Linux系统开发详解,分享给大
    发表于 08-04 12:35 74次下载
    (网盘)ARM<b class='flag-5'>嵌入式</b>Linux系统开发<b class='flag-5'>详解</b>

    嵌入式C之操作的应用

    嵌入式运算嵌入式系统中常用的优化技巧之,它可以通过位运算操作来实现
    发表于 05-20 16:52 675次阅读