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

移位操作存储多个布尔值或标志位

基本概念

  1. 位表示

    • 整数的每一位(bit)可以表示一个布尔值或标志位,通常是 01
  2. 移位操作

    • 左移(<<:将整数的位向左移动,腾出右侧位的位置。
    • 右移(>>:将整数的位向右移动,腾出左侧位的位置。
  3. 位掩码(Bit Mask)

    • 用于提取或设置特定的位。例如,通过按位与(&)操作与掩码结合,可以提取某一位的值;通过按位或(|)操作与掩码结合,可以设置某一位的值。

示例

假设我们有一个 int 类型的变量(32位),我们可以使用它来存储32个布尔值或标志位。

设置标志位
int flags = 0;  // 初始化为0,表示所有标志位都是false// 设置第3个位为true
flags |= (1 << 3);  // 使用位运算设置第3位为1// 设置第10个位为true
flags |= (1 << 10);  // 使用位运算设置第10位为1
读取标志位
// 读取第3个位的值
boolean isFlag3Set = (flags & (1 << 3)) != 0;  // 判断第3位是否为1// 读取第10个位的值
boolean isFlag10Set = (flags & (1 << 10)) != 0;  // 判断第10位是否为1
清除标志位
// 清除第3个位
flags &= ~(1 << 3);  // 使用位运算清除第3位// 清除第10个位
flags &= ~(1 << 10);  // 使用位运算清除第10位

优势

  1. 节省内存:每个位只需要1 bit,相比每个布尔值使用8位(1字节),这种方法可以显著节省内存,尤其是在需要存储大量布尔值时。
  2. 高效:位操作通常是CPU指令级的操作,非常高效。

应用场景

  • 状态标志:例如,操作系统的状态标志、游戏的状态控制。
  • 网络协议:在网络协议中存储多个标志位,如TCP标志位。
  • 配置选项:在软件中通过位标志表示多个配置选项。

利用位操作可以有效地节省内存和提高性能,但需要仔细管理位的操作和状态,以避免错误。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 自闭症儿童上普校,会面临霸凌吗?
  • Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2.2
  • 【经验分享】CANOPEN协议驱动移植(基于CANfestival源码架构)
  • Unity3D DOTS中ECS核心架构详解
  • 华为OD机试 - 数大雁(Java 2024 E卷 100分)
  • 指针的一些细节补充———C语言
  • Python 如何操作 Excel 文件(openpyxl, xlrd)
  • 基于STM32开发的智能农业监测与控制系统
  • 【深度学习】迭代次数 vs bs? 迭代次数 vs epoch
  • Vue.js 样式绑定
  • Systemc example based on VCS
  • 专家系统的核心要点解析|专家系统|人工智能|知识工程
  • 【中仕公考是骗子吗】公务员联考是什么意思?
  • 线性代数基础
  • 基于ssm+vue+uniapp的图书管理系统小程序
  • [LeetCode] Wiggle Sort
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Laravel Mix运行时关于es2015报错解决方案
  • React组件设计模式(一)
  • 代理模式
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 工程优化暨babel升级小记
  • 前端面试总结(at, md)
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序button引导用户授权
  • 一些关于Rust在2019年的思考
  • 与 ConTeXt MkIV 官方文档的接驳
  • #QT(智能家居界面-界面切换)
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (四)React组件、useState、组件样式
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)linux下的时间函数使用
  • (转)nsfocus-绿盟科技笔试题目
  • .gitattributes 文件
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET建议使用的大小写命名原则
  • .net知识和学习方法系列(二十一)CLR-枚举
  • @RequestMapping处理请求异常
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • []C/C++读取串口接收到的数据程序
  • []T 还是 []*T, 这是一个问题
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [Angular] 笔记 21:@ViewChild
  • [BUUCTF]-Reverse:reverse3解析
  • [C++提高编程](三):STL初识
  • [CTF]2022美团CTF WEB WP
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • [ffmpeg] x264 配置参数解析
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解
  • [HDU5685]Problem A
  • [JavaScript] JavaScript事件注册,事件委托,冒泡,捕获,事件流
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • [jQuery]div滚动条回到最底部