【ARM 嵌入式 C 入门及渐进 12.2 -- 将数值的第 0 位到 n 位清零】

2024-05-12 10:28

本文主要是介绍【ARM 嵌入式 C 入门及渐进 12.2 -- 将数值的第 0 位到 n 位清零】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


请阅读【嵌入式开发学习必备专栏】


文章目录

    • 将数值的第 0 位到 n位清零

将数值的第 0 位到 n位清零

要定义一个宏VAL_CLR_BITS(val, n),该宏将变量val的第0位到第n位清零(包括第n位),其余位的值保持不变,我们可以使用位操作来实现这个功能。以下是宏的一个可能实现:

#define VAL_CLR_BITS(val, n) ((val) & ~((1ULL << ((n) + 1)) - 1))

这个宏的工作原理如下:

  1. 1ULL << ((n) + 1):首先将1(使用unsigned long long类型以确保宽度)左移n+1位。这样做的目的是创建一个值,其中第0位到第n位都是1,其余位都是0。
  2. -1:然后,从这个值中减去1,这会将第0位到第n位变为0,而第n+1位变为1(如果存在),其余高位保持为0。
  3. ~:接着,对上一步的结果取反,这会将第0位到第n位变为1,其余位保持不变。
  4. &:最后,使用与操作&val与上一步得到的掩码进行位与操作。由于掩码中第0位到第n位为0,其余位为1,因此这一操作将清零val的第0位到第n位,而保留其余位的值不变。
    这是一个示例代码,演示如何使用VAL_CLR_BITS宏:
#include <stdio.h>
#define VAL_CLR_BITS(val, n) ((val) & ~((1ULL << ((n) + 1)) - 1))int main(void) 
{unsigned int val = 0xFFFF; // 16位宽的值,初始全为1unsigned int n = 3; // 将第0位到第3位清零unsigned int result = VAL_CLR_BITS(val, n);printf("Original value: 0x%X\n", val);printf("After masking: 0x%X\n", result);return 0;
}

这段代码将输出val的原始值和应用VAL_CLR_BITS宏后的结果。在这个示例中,val初始值为0xFFFF,即所有位都是1。应用VAL_CLR_BITS(val, 3)后,结果将是0xFFF0,即第0位到第3位被清零。

这篇关于【ARM 嵌入式 C 入门及渐进 12.2 -- 将数值的第 0 位到 n 位清零】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982366

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显