《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.5 位运算实战演练1

简介:

本节书摘来自异步社区《嵌入式Linux与物联网软件开发——C语言内核深度解析》一书中的第2章,第2.5节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 位运算实战演练1

2.5.1 给定整型数a,设置a的bit3,保证其他位不变

分析:将整数a和bit3为1,其余bit为0的数进行位或运算即可得到结果。

构造bit3为1的数。

1<<3

然后和整数a相位或并且赋值给a。

a = a | (1<<3);或者a |= (1<<3);

2.5.2 给定整型数a,设置a的bit3~bit7,保持其他位不变

分析:构造数的bit3~bit7为1。

构造bit3~bit7为1的数。

0x1f<<3

和整数a相位或并赋值给a。

a = a | (0x1f<<3)    或者a |= (0b11111<<3);

2.5.3 给定整型数a,清除a的bit15,保证其他位不变

分析:将整数a和一个bit15为0,其余bit位为1的数进行位与运算即可得结果。

构造bit15为0,其余位为1的数。在构造这个数之前,通过2.3节的分析需要先构造bit15为1,其余位为0的数,然后位取反即可。

~(1<<15)

和整数a相位与并赋值给a。

a = a & (~(1<<15));或者a &= (~(1<<15));

2.5.4 给定整型数a,清除a的bit15~bit23,保持其他位不变

分析:将整数a和一个bit15~ bit23为0,其余bit位为1的数进行位与运算即可得结果。

构造bit15~ bit23为0,其余位为1的数。

~(0x1ff<<15)

和整数a位与并赋值给a。

a = a & (~(0x1ff<<15));或者a &= (~(0x1ff<<15));

2.5.5 给定整型数a,取出a的bit3~bit8

分析:先将这个数bit3~bit8不变,其余位全部清零;再将其右移3位得到结果;想明白了上面的两步算法,再将其转为C语言实现即可。

构造bit3~ bit8为1,其余位为0的数。

0x3f<<3

和整数a位与并赋值给a。

a &= (0x3f<<3);

再将a右移3位。

a >>= 3;

2.5.6 用C语言给寄存器a的bit7~bit17赋值937(其余位不受影响)

分析:我们只需要将bit7~bit17全部清零,然后再将937设置到bit7~bit17位,这个过程中必须注意的一点就是不能影响其他位。

构造bit7~bit17为0,其余位为1的数。

~(0x7ff<<7)

bit7~bit17清零。

a &= ~(0x7ff<<7);

构造bit7~bit17为937,其余位为0的数。

937<<7

将937写入a的bit7~bit17。

a |= (937<<7);
相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
7月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
663 1
|
7月前
|
Ubuntu Linux
Ubuntu 23.04 用上 Linux 6.2 内核,预计下放到 22.04 LTS 版本
Linux 6.2 带来了多项内容更新,修复了 AMD 锐龙处理器设备在启用 fTPM 后的运行卡顿问题,还增强了文件系统。
|
7月前
|
Ubuntu Linux
Ubuntu 23.10 现在由Linux内核6.3提供支持
如果你想在你的个人电脑上测试一下Ubuntu 23.10的最新开发快照,你可以从官方下载服务器下载最新的每日构建ISO。然而,请记住,这是一个预发布版本,所以不要在生产机器上使用或安装它。
|
7月前
|
传感器 监控 Ubuntu
10 月发布,Ubuntu 23.10 已升级到 Linux Kernel 6.3 内核
硬件方面,Linux 6.3 引入了在 HID 中引入了原生的 Steam Deck 控制器接口,允许罗技 G923 Xbox 版赛车方向盘在 Linux 上运行;改善 8BitDo Pro 2 有线控制器的行为;并为一系列华硕 Ryzen 主板添加传感器监控。
|
7月前
|
Ubuntu Linux
Ubuntu24.04LTS默认采用Linux 6.8内核,实验性版本可通过PPA获得
IT之家提醒,当下的 Ubuntu 23.10 也是一个“短期支持版本”,该版本将在今年 7 月终止支持,而今年 4 月推出的 Ubuntu 24.04 LTS 长期支持版本将获得 5 年的更新支持。
|
7月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
424 0
|
7月前
|
Web App开发 缓存 Rust
|
7月前
|
Ubuntu 安全 Linux
Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
本地攻击者可以利用上述漏洞,攻击 Ubuntu 22.10、Ubuntu 22.04、Ubuntu 20.04 LTS 发行版,导致拒绝服务(系统崩溃)或执行任意代码。
|
7月前
|
Ubuntu 机器人 物联网
Linux Ubuntu 22.04 LTS 测试版实时内核已可申请
请注意,在启用实时内核后您需要手动配置 grub 以恢复到原始内核。更多内容请参考:

相关产品

  • 物联网平台