《嵌入式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);
相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
9天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
24天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
164 0
|
28天前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
30 0
|
8天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
24 6
|
28天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
12天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
2天前
|
算法 Linux 调度
深入理解Linux内核的进程调度机制
【4月更文挑战第17天】在多任务操作系统中,进程调度是核心功能之一,它决定了处理机资源的分配。本文旨在剖析Linux操作系统内核的进程调度机制,详细讨论其调度策略、调度算法及实现原理,并探讨了其对系统性能的影响。通过分析CFS(完全公平调度器)和实时调度策略,揭示了Linux如何在保证响应速度与公平性之间取得平衡。文章还将评估最新的调度技术趋势,如容器化和云计算环境下的调度优化。
|
7天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
18 3
|
12天前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
12天前
|
存储 网络协议 编译器
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇

相关产品

  • 物联网平台