江西网站制作的公司哪家好/不限制内容的搜索引擎

江西网站制作的公司哪家好,不限制内容的搜索引擎,买完阿里云域名如何做网站,企业微信开发【16】单片机编程核心技巧:移位运算的应用 七律 移位 左迁乘二寄存移,右徙除二暂寄时。 二进玄机藏位里,一移妙法化玄机。 合璧分疆拼字节,置位清零控毫厘。 速效堪超乘除算,单片机中展神威。 摘要 移位运算是单片…

【16】单片机编程核心技巧:移位运算的应用

七律 · 移位

左迁乘二寄存移,右徙除二暂寄时。
二进玄机藏位里,一移妙法化玄机。
合璧分疆拼字节,置位清零控毫厘。
速效堪超乘除算,单片机中展神威。

摘要

移位运算是单片机编程中一种高效且灵活的位操作技术,广泛应用于数值运算优化、数据类型转换及寄存器位操作等领域。本文系统阐述了左移和右移运算的原理、与乘除法的关系、典型应用场景及编程技巧,并通过实验验证了其有效性。研究表明,移位运算在速度和代码可读性方面具有显著优势,是单片机开发中不可或缺的编程工具。
关键字:移位运算,左移,右移,单片机编程,位操作


引言

在单片机资源受限的环境下,高效利用硬件特性是提升程序性能的关键。移位运算通过直接操作二进制位,可在减少运算时间、优化内存使用及简化复杂操作等方面发挥重要作用。本文以左移和右移运算为核心,结合实例分析其运算规律、应用场景及编程实践,旨在为开发者提供系统化的理论指导与实用技巧。


1. 左移运算

1.1 左移运算的定义与规律

左移运算符为 <<,其通用格式为:

保存变量 = 被移数 << n;  

运算过程如下:

  1. 复制与移位:被移数被复制到临时变量(寄存器)中,并展开为二进制形式。
  2. 位移操作:二进制位整体向左移动 n 位,高位溢出部分被舍弃,低位补 0
  3. 结果存储:移位后的结果存入“保存变量”,而“被移数”本身不变。

示例

unsigned char a = 5; // 二进制:00000101  
a = a << 1;          // 移位后:00001010 → 十进制 10  

1.2 左移与乘法的关系

左移 n 位等价于乘以 2ⁿ,且运算速度远快于乘法指令。例如:

  • 5 << 15 × 2 = 10
  • 5 << 25 × 2² = 20

1.3 典型应用场景

1.3.1 数据类型合并

将两个 unsigned char 合并为 unsigned int

unsigned char H = 0x12, L = 0x34;  
unsigned int c = (H << 8) | L; // 结果:0x1234  
1.3.2 位操作聚焦

通过左移结合逻辑运算(或、与)可精准控制变量的某一位:

  • 置位b |= (1 << n)(如 b |= (1 << 0) 将第 0 位置 1)。
  • 清零b &= ~(1 << n)(如 b &= ~(1 << 0) 清除第 0 位)。

1.4 左移简写形式

a <<= n; // 等价于 a = a << n;  

2. 右移运算

2.1 右移运算的定义与规律

右移运算符为 >>,其通用格式为:

保存变量 = 被移数 >> n;  

运算过程如下:

  1. 复制与移位:被移数被复制到临时变量中,并展开为二进制形式。
  2. 位移操作:二进制位整体向右移动 n 位,低位溢出部分被舍弃,高位补 0
  3. 结果存储:移位后的结果存入“保存变量”,而“被移数”本身不变。

示例

unsigned char b = 5; // 二进制:00000101  
b = b >> 2;          // 移位后:00000001 → 十进制 1  

2.2 右移与除法的关系

右移 n 位等价于整除 2ⁿ,运算速度优于除法指令。例如:

  • 5 >> 15 ÷ 2 = 2
  • 5 >> 25 ÷ 2² = 1

2.3 典型应用场景

2.3.1 数据类型分解

unsigned int 分解为两个 unsigned char

unsigned int c = 0x1234;  
unsigned char H = c >> 8; // 0x12  
unsigned char L = c;     // 0x34  

2.4 右移简写形式

d >>= n; // 等价于 d = d >> n;  

3. 实验验证

3.1 左移运算实验

代码片段:

unsigned char a = 5;  
a <<= 1; // 结果:10  

实验结果:

  • 十进制:10
  • 十六进制:0xA
  • 二进制:1010

3.2 右移运算实验

代码片段:

unsigned int c = 0x1234;  
unsigned char H = c >> 8; // 结果:0x12  

实验结果:

  • H 的十进制值为 18,L 的十进制值为 52。

4. 结论

移位运算通过直接操作二进制位,显著提升了单片机程序的执行效率与代码可读性。其在数值运算优化、数据类型转换及寄存器位操作中的应用,为资源受限的嵌入式系统提供了高效解决方案。开发者应结合具体场景选择合适的应用方式,以充分发挥其优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux内核系列】:文件系统

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz ★★★ 本文前置知识&#xff1a; 文件系统初识 那么在我们此前关于文件的学习中&#xff0c;我们学习的都是进程与打开的文件之间的关系&#xff0c;以及打开的文件如何进行管理…

git commit messege 模板设置 (规范化管理git)

配置方法 git config --global core.editor vim &#xff08;设置 Git 的默认编辑器为 Vim&#xff09;在用户根目录下&#xff08;~&#xff09;&#xff0c;创建一个.git_commit_msg文件&#xff0c;然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…

ChatGPT4.5详细介绍和API调用详细教程

OpenAI在2月27日发布GPT-4.5的研究预览版——这是迄今为止OpenAI最强大、最出色的聊天模型。GPT-4.5在扩大预训练和微调规模方面迈出了重要的一步。通过扩大无监督学习的规模&#xff0c;GPT-4.5提升了识别内容中的模式、建立内容关联和生成对于内容的见解的能力&#xff0c;但…

AI 中对内存的庞大需求

刚接触AI时&#xff0c;只知道AI对显存的要求很高&#xff0c;但慢慢发现&#xff0c;AI对内存的要求也越来越高了。 最近尝试玩下 wan 2.1 &#xff0c;进行图生视频&#xff0c;使用comfyui官方工作流&#xff0c;720p&#xff08;720*1280&#xff09;53帧&#xff0c;结果…

如何选择适合您智能家居解决方案的通信协议?

如何选择适合您智能家居解决方案的通信协议&#xff1f; 在开发智能家居产品时&#xff0c;选择合适的通信协议对于设备的高效运行及其在智能家居系统中的互操作性至关重要。市面上协议众多&#xff0c;了解它们的特性并在做决定前考虑各种因素是非常必要的。以下是一些帮助您…

L3-1 夺宝大赛

输入样例 1&#xff1a; 5 7 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 2 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 7 1 5 7 1 1 1 5 5 3 1 3 5 1 4输出样例 1&#xff1a; 7 6样例 1 说明&#xff1a; 七支队伍到达大本营的时间顺次为&#xff1a;7、不可能、5、3、3、5、6&#xff0c…

海思高安主控芯片兼容编译fastboot流程

华为海思主控芯片有高安和非高安之分&#xff0c;主要是安全性上区别&#xff0c;启动程序不同&#xff0c;一般无法共用。但实际生产中可能出现混料或者同一款产品不同批次一个是高安的一个是非高安的&#xff0c;这时就需要软件上做兼容&#xff0c;实际是高安固件是可以做到…

C# WPF 基础知识学习(二)

四、数据绑定 &#xff08;一&#xff09;数据绑定基础 绑定源和目标&#xff1a;数据绑定建立了 UI 元素&#xff08;绑定目标&#xff09;属性与数据源&#xff08;绑定源&#xff09;之间的联系。例如&#xff0c;将一个TextBox的Text属性绑定到一个对象的某个属性上。绑定…

Trae AI IDEA安装与使用

文章目录 背景第一步、下载安装第二步、登录与使用优势异常处理 背景 最近比较热的 Trae 开发工具&#xff0c;在本地下载使用&#xff0c;记录下来。 第一步、下载安装 下载地址&#xff1a;【Trae中文版下载地址】&#xff0c;下载的安装文件名为&#xff1a;【Trae CN-Se…

【LangChain接入阿里云百炼deepseek】

这是目录 前言阿里云百炼注册账号使用代码执行结果 前言 大模型爆火&#xff0c;现在很多教程在教怎么使用大模型来训练Agent智能体&#xff0c;但是大部分教程都是使用的OpenAI。 最近阿里云推出DeepSeek-R1满血版&#xff0c;新用户可享100万免费Token额度。 今天就教大家怎…

火绒企业版V2.0全面支持Linux与国产化系统!免费试用助力国产化终端安全升级

国产化浪潮下的安全新挑战 随着信创产业的加速推进&#xff0c;国产操作系统&#xff08;统信UOS、麒麟OS等&#xff09;和ARM架构服务器逐步成为政企核心业务的基础设施。然而&#xff0c;针对国产化系统的勒索攻击、网页篡改、供应链漏洞等威胁频发&#xff0c;传统安全方案…

【HarmonyOS Next】鸿蒙加固方案调研和分析

【HarmonyOS Next】鸿蒙加固方案调研和分析 一、前言 根据鸿蒙应用的上架流程&#xff0c;本地构建app文件后&#xff0c;上架到AGC平台&#xff0c;平台会进行解析。根据鸿蒙系统的特殊设置&#xff0c;仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程…

win11编译llama_cpp_python cuda128 RTX30/40/50版本

Geforce 50xx系显卡最低支持cuda128&#xff0c;llama_cpp_python官方源只有cpu版本&#xff0c;没有cuda版本&#xff0c;所以自己基于0.3.5版本源码编译一个RTX 30xx/40xx/50xx版本。 1. 前置条件 1. 访问https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…

【物联网-WIFI】

物联网-WIFI ■ ESP32-C3-模块简介■ ESP32-C3-■ ESP32-C3-■ WIFI-模组■ WIFI-■ WIFI- ■ ESP32-C3-模块简介 ■ ESP32-C3- ■ ESP32-C3- ■ WIFI-模组 ■ WIFI- ■ WIFI-

LeetCode1871 跳跃游戏VII

LeetCode 跳跃游戏 IV&#xff1a;二进制字符串的跳跃问题 题目描述 给定一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump。初始时&#xff0c;你位于下标 0 处&#xff08;保证该位置为 0&#xff09;。你需要判断是否能到达字符串的最后一个位置&#xf…

Burpsuite使用笔记

Burpsuite使用笔记 抓包设置代理open Browserintercept on输入要抓包的网站回车ForwardHTTP history查看抓包数据其他浏览器配置burpsuite代理浏览器代理器插件配置打开代理同样步骤访问原理三级目录抓包 设置代理 open Browser 打开内置浏览器 intercept on 输入要抓包的网…

Windows 远程桌面多端口访问,局域网虚拟IP映射多个Windows 主机解决方案

情景 项目现场4G路由局域网中两台主机通过VPN连接到公司内网&#xff0c;实现远程管理&#xff0c;要求映射两个Windows 桌面进行管理。 目录 情景 网络 思路 已知 问题解决 1.客户端通过VPN进入内网路由器配置NAT 2.使用远程主机远程桌面功能&#xff1a;IP端口号访问 …

VS Code C++ 开发环境配置

VS Code 是当前非常流行的开发工具. 本文讲述如何配置 VS Code 作为 C开发环境. 本文将按照如下步骤来介绍如何配置 VS Code 作为 C开发环境. 安装编译器安装插件配置工作区 第一个步骤的具体操作会因为系统不同或者方案不同而有不同的选择. 环境要求 首先需要立即 VS Code…

Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能

Flutter 学习之旅 之 flutter 不使用插件&#xff0c;实现简单带加载动画的 LoadingToast 功能 目录 Flutter 学习之旅 之 flutter 不使用插件&#xff0c;实现简单带加载动画的 LoadingToast 功能 一、简单介绍 二、LoadingToast 三、简单案例实现 四、关键代码 一、简单…

Spring (八)AOP-切面编程的使用

目录 实现步骤&#xff1a; 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示&#xff1a; 一 实现步骤&#xff1a; 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframewor…