当前位置: 首页 > news >正文

《C++中插入位的函数实现及示例说明》

《C++中插入位的函数实现及示例说明》

这个函数 insertBits 的作用是将整数 M 插入到整数 N 的指定位置区间 [i, j] 中。具体来说,函数会先清除 N 中从第 i 位到第 j 位的所有位,然后将 M 左移 i 位后与清除后的 N 相加,从而将 M 插入到 N 的指定位置。

函数实现步骤解析:

清除 N 中从第 i 位到第 j 位的所有位

for (int n = i; n <= j; ++n){N &=  ~(1 << n);}

1 << n:生成一个只有第 n 位为 1 的二进制数。

~(1 << n):对上述结果取反,得到一个只有第 n 位为 0,其余位全为 1 的二进制数。

N &= ~(1 << n):将 N 与这个数进行按位与操作,从而将 N 的第 n 位清零。

循环从 ij,确保将 N 的第 i 位到第 j 位全部清零。

M 左移 i 位后与清除后的 N 相加

return N + (M << i);

M << i:将 M 左移 i 位,使其对齐到 N 中被清除的位置区间 [i, j]

N + (M << i):将左移后的 M 与清除后的 N 相加,完成插入操作。

示例说明:

假设 N = 10000000000(二进制),M = 10011(二进制),i = 2j = 6

清除 N 的第 2 位到第 6 位

清除后的 N 变为 10000000000(二进制),因为原 N 的第 2 到 6 位本来就是 0。

M 左移 2 位

M << 2 得到 1001100(二进制)。

将左移后的 M 与清除后的 N 相加

10000000000 + 1001100 = 10001001100(二进制),即十进制的 1100

注意事项:

该函数假设 M 的位数不超过 j - i + 1,否则可能导致数据溢出。

使用加法 + 而非按位或 | 是安全的,因为清除操作确保了 N 的第 ij 位全为 0,不会与 M << i 产生进位冲突。

函数用途:

这个函数常用于位操作中,例如在嵌入式系统中配置寄存器的特定位域,或在数据压缩、加密等场景中将小数据块插入到大数据结构的指定位置。

http://www.xdnf.cn/news/377299.html

相关文章:

  • 大模型中的三角位置编码实现
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类边距QMarginsF)
  • 【部署】win10的wsl环境下启动dify的web前端服务
  • 21.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--身份认证服务拆分规划
  • linux perf top分析系统性能
  • 光流 | 基于深度学习的光流估计算法汇总,原理,公式,流程图,代码
  • 人形机器人量产元年开启,AI与物理世界深度融合
  • CAS操作
  • Ceph集群故障处理 - PG不一致修复
  • [SV]等待32个instance的某一个信号的pulse,该怎么写?
  • Windows 系统 - Trae 内 终端 无法使用 node (重新配置 nodejs 路径)
  • 青藏高原东北部祁连山地区250m分辨率多年冻土空间分带指数图(2023)
  • AtCoder AT_abc405_d ABC405D - Escape Route
  • 智慧能源大数据平台建设方案(PPT)
  • 数字孪生实战笔记(1)数字孪生的含义、应用及技术体系
  • RPA 浏览器自动化:高效扩展与智能管理的未来
  • SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)
  • 基于阿伦尼斯模型的电池寿命预测:原理、应用与挑战
  • 数据结构:树(树的定义和基本术语)
  • JGL069垃圾填埋场模拟装置试验台
  • 力扣top100 矩阵置零
  • 近日部署跑通的若干多模态模型总结与论文概述
  • clangd与clang-tidy
  • Flutter PIP 插件 ---- 为iOS 重构PipController, Demo界面,更好的体验
  • 优选算法——前缀和
  • Java---StringJoiner 的使用
  • C++11新特性:深入解析decltype关键字及其与auto的区别
  • AI Agent(8):安全与伦理考量
  • [题解]2023CCPC黑龙江省赛 - Folder
  • 警惕C#版本差异多线程中的foreach陷阱