《嵌入式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
AI 代码解读

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

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

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

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

构造bit3~bit7为1的数。

0x1f<<3
AI 代码解读

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

a = a | (0x1f<<3)    或者a |= (0b11111<<3);
AI 代码解读

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

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

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

~(1<<15)
AI 代码解读

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

a = a & (~(1<<15));或者a &= (~(1<<15));
AI 代码解读

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

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

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

~(0x1ff<<15)
AI 代码解读

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

a = a & (~(0x1ff<<15));或者a &= (~(0x1ff<<15));
AI 代码解读

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

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

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

0x3f<<3
AI 代码解读

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

a &= (0x3f<<3);
AI 代码解读

再将a右移3位。

a >>= 3;
AI 代码解读

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

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

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

~(0x7ff<<7)
AI 代码解读

bit7~bit17清零。

a &= ~(0x7ff<<7);
AI 代码解读

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

937<<7
AI 代码解读

将937写入a的bit7~bit17。

a |= (937<<7);
AI 代码解读
相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
打赏
0
0
0
0
1811
分享
相关文章
操作系统的心脏:内核深度解析
在数字世界的构建中,操作系统扮演着基石的角色,而其核心—内核,则是这一复杂系统的灵魂。本文将深入探讨操作系统内核的工作原理,揭示它是如何管理硬件资源、运行程序以及提供系统服务的。通过理解内核的结构和功能,我们可以更好地把握计算机系统的运作机制,进而优化和创新我们的技术实践。
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
59 2
操作系统的心脏——内核深度解析
【10月更文挑战第29天】 本文深入探讨了操作系统的核心组件——内核,包括其定义、功能、架构以及在现代计算中的重要性。通过对比不同操作系统内核的设计哲学和技术实现,揭示了内核如何影响系统性能、稳定性和安全性。此外,文章还讨论了未来内核技术的潜在发展方向,为读者提供了一个全面了解内核工作原理的平台。
深入探索操作系统的心脏——内核机制解析
本文旨在揭示操作系统核心——内核的工作原理,通过剖析其关键组件与机制,为读者提供一个清晰的内核结构图景。不同于常规摘要的概述性内容,本文摘要将直接聚焦于内核的核心概念、主要功能以及其在系统管理中扮演的角色,旨在激发读者对操作系统深层次运作原理的兴趣与理解。
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
84 4
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
探索操作系统:从内核到用户界面的全面解析
本文旨在深入探讨操作系统的本质、核心组件及其功能。通过分析操作系统的各个层次,包括内核、驱动程序、中间件及用户界面,揭示其背后的技术原理和设计思想。此外,本文还将讨论操作系统在现代计算中的重要性及其未来发展趋势。
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
528 8
操作系统的心脏:内核深入解析
本文将带您走进计算机的大脑—操作系统内核,探索它如何管理硬件资源、提供系统服务,并确保多任务高效运行。文章以浅显易懂的语言,逐步揭示内核的神秘面纱,从基础概念到实际应用,让您对操作系统的核心组件有更深的理解。
147 5

物联网

+关注

相关产品

  • 物联网平台
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等