基础知识:位运算
基础知识:位运算
- 1. 两类表达式
- 2. 项目中用到位运算的🌰
1. 两类表达式



2. 项目中用到位运算的🌰
在一个表中增加一个字段,控制报餐的6个字段包括午餐、晚餐、夜餐1、夜餐2、白班、晚班。正常在表中需要增加6个字段来做开关,但现在通过位运算只需要加一个字段。
具体的步骤如下:
-
定义一个整型变量,用于存储开启状态的位掩码。假设该变量名为
stateMask。 -
对于每个字段,定义一个与之对应的位掩码值,并使用
<<运算符将其左移相应位置。假设这些字段的位掩码变量名分别为dayshiftMask、nightshiftMask、lunchMask、dinnerMask、night1Mask和night2Mask。 -
在设置字段的开启状态时,使用
stateMask与对应的位掩码进行按位或操作,即使用|运算符。例如,要设置dayshift_time字段的开启状态,使用stateMask |= dayshiftMask;。 -
在关闭字段的开启状态时,使用
stateMask与对应的位掩码进行按位与操作,然后再取反,即使用~运算符。例如,要关闭nightshift_time字段的开启状态,可以使用stateMask &= ~nightshiftMask;。 -
检查字段的开启状态时,使用
stateMask与对应的位掩码进行按位与操作,然后再判断结果是否为0。如果结果为0,则表示对应的字段为关闭状态;如果结果不为0,则表示对应的字段为开启状态。例如,要检查lunch_time字段是否开启,可以使用(stateMask & lunchMask) != 0进行判断。
栗子代码
public class ConfigFieldControl {private static final int dayshiftMask = 1 << 0; // 00000001private static final int nightshiftMask = 1 << 1; // 00000010private static final int lunchMask = 1 << 2; // 00000100private static final int dinnerMask = 1 << 3; // 00001000private static final int night1Mask = 1 << 4; // 00010000private static final int night2Mask = 1 << 5; // 00100000public static void main(String[] args) {int stateMask = 0;// 开启 dayshift_time 和 lunch_time 字段stateMask |= dayshiftMask;stateMask |= lunchMask;// 关闭lunch_timestateMask &= ~lunchMask// 检查字段的开启状态boolean isDayshiftTimeEnabled = (stateMask & dayshiftMask) != 0;boolean isNightshiftTimeEnabled = (stateMask & nightshiftMask) != 0;boolean isLunchTimeEnabled = (stateMask & lunchMask) != 0;boolean isDinnerTimeEnabled = (stateMask & dinnerMask) != 0;boolean isNight1TimeEnabled = (stateMask & night1Mask) != 0;boolean isNight2TimeEnabled = (stateMask & night2Mask) != 0;System.out.println("dayshift_time is enabled: " + isDayshiftTimeEnabled);System.out.println("nightshift_time is enabled: " + isNightshiftTimeEnabled);System.out.println("lunch_time is enabled: " + isLunchTimeEnabled);System.out.println("dinner_time is enabled: " + isDinnerTimeEnabled);System.out.println("night1_time is enabled: " + isNight1TimeEnabled);System.out.println("night2_time is enabled: " + isNight2TimeEnabled);}
}
总结:
-
这种设置可以实现对多个字段的开启与关闭状态的控制,是因为它利用了位运算的特性和位掩码的概念。
-
在这个设置中,每个字段都有一个对应的位掩码,通过将位掩码与状态掩码进行按位与或按位非的操作,可以实现对字段的开启和关闭。
-
具体来说,每个字段的位掩码是一个唯一的二进制值,其中只有一个位为1,其余位为0。位掩码可以通过左移操作符
<<来生成,将1左移相应的位数。 -
当要将某个字段设置为开启状态时,将该字段的位掩码与状态掩码进行按位或操作,相当于将该位设置为1,其他位保持不变。这样就能表示该字段为开启状态。
-
当要将某个字段设置为关闭状态时,将该字段的位掩码取反后与状态掩码进行按位与操作,相当于将该位设置为0,其他位保持不变。这样就能表示该字段为关闭状态。
-
通过按位与运算,可以将状态掩码中的1只保留在对应位为1的字段的位掩码上,其他位都变为0。然后再进行条件判断,若结果不为0,则表示对应的字段为开启状态。
-
这种方式可以节省存储空间,每个字段的开启状态只占用一个位,而不是使用额外的布尔值或整型来记录每个字段的状态。同时,通过位运算,可以很方便地实现对多个字段的同时开启和关闭。
相关文章:
基础知识:位运算
基础知识:位运算 1. 两类表达式2. 项目中用到位运算的🌰 1. 两类表达式 2. 项目中用到位运算的🌰 在一个表中增加一个字段,控制报餐的6个字段包括午餐、晚餐、夜餐1、夜餐2、白班、晚班。正常在表中需要增加6个字段来做开关&…...
Android菜单Menu详解
菜单资源文件通常放置在res\menu目录下,在创建项目时,默认不自动创建menu目录,所以需手动创建。 Android Resource Directory→ value menu 或在创建根元素为<menu></menu>标记的xml文件对自动气建眼 res→Android Resounce File…...
win10 + cmake3.17 + vs2017编译osgearth2.7.0遇到的坑
坑1:debug模式下生成osgEarthAnnotation时 错误:xmemory0(881): error C2440: “初始化”: 无法从“std::pair<const _Kty,_Ty>”转换为 to _Objty 出错位置:src/osgEarthFeatures/FeatureSourceIndexNode.cpp 解决办法: …...
【Linux网络编程_TCP/UDP_字节序_套接字 实现: FTP 项目_局域网聊天项目 (已开源) 】.md updata:23/11/05
文章目录 TCP/UDP对比端口号作用字节序字节序转换api套接字 socket实现网络通讯服务端 逻辑思路demo: 满血版双方通讯/残血版多方通讯 (配合进程实现)服务端 demo客户端 demo FTP 项目实现sever demo:client demo: 局域网多方通讯 ࿰…...
SpringBoot日志基础
1.yml 说明:配置yml文件。debug、info、warn、error。 logging:level:root: debug2.指定某个包 logging:level:root: info # 设置某个包的日志级别com.forever.controller: debug 3.分组调试 logging:# 设置分组group:ebank: com.forever.controlleriservic…...
linux文章导航栏
linux文章导航栏 问价解压缩大全Linux tar 备忘清单zip文件解压缩命令全 ubuntuubuntu18.04安装教程\搜狗输入法\网络配置教程Linux静态库和动态库 shellShell脚本命令...
Adobe:受益于人工智能,必被人工智能反噬
来源:猛兽财经 作者:猛兽财经 总结: (1)Adobe(ADBE)受益于生成式人工智能的兴起,其一直能实现两位数的收入增长就证明了这一点。 (2)在生成式人工智能兴起时,该公司就快…...
VScode配置 github 上传代码
初始化,设置用户名和密码 # 设置你的 Git 用户名 git config --global user.name author# 设置你的 Git 邮箱 git config --global user.email authorgmail.com# 确保 Git 输出带有颜色 git config --global color.ui auto# 查看 Git 配置 git list1. 初始化本地…...
mysql根据条件导出表数据(`--where=“文本“`)
本文只讲导出,导入可以参考不同MySQL服务的表以及库的数据迁移(/备份)-CSDN博客 现在先查下migration_one.table_11里有什么: SELECT * FROM migration_one.table_11;id name ------ -------- 12321 hehe 1321 …...
MySQL复习总结(二):进阶篇(索引)
文章目录 一、存储引擎1.1 MySQL体系结构1.2 存储引擎介绍1.3 存储引擎特点1.4 存储引擎选择 二、索引2.1 基本介绍2.2 索引结构2.3 索引分类2.4 索引语法2.5 SQL性能分析2.6 索引使用2.6.1 最左前缀法则2.6.2 范围查询2.6.3 索引失效情况2.6.4 SQL提示2.6.5 覆盖索引2.6.6 前缀…...
java APP自动化测试AppIum
一、前言 二、Appium环境搭建 2.1 JDK安装 2.2 Android SDK安装配置 2.3 模拟器安装及配置 2.4 Appium Desktop安装及使用 2.5 Appium配置连接模拟器 三、实战基本脚本编写 3.1 创建Maven项目并配置 3.2 简单Demo 四、写在最后 一、前言 随着移动互联网的发展,AP…...
【洛谷 P1303】A*B Problem 题解(高精度+字符串)
A*B Problem 题目描述 给出两个非负整数,求它们的乘积。 输入格式 输入共两行,每行一个非负整数。 输出格式 输出一个非负整数表示乘积。 样例 #1 样例输入 #1 1 2样例输出 #1 2提示 每个非负整数不超过 1 0 2000 10^{2000} 102000。 思路 …...
计算机网络(43)
目录 计算机网络学习 1、OSI 七层网络模型,你了解吗?具体功能有哪些? 2、TCP/IP四层模型? 3、说一下TCP的三次握手? 4、为什么要三次握手?两次行不行?四次呢? 5、为什么建立连接是三…...
Ipswitch WS_FTP 12 安裝
Ipswitch WS.FTP.Professional.12.6.rar_免费高速下载|百度网盘-分享无限制 This works but quite difficult to figure out. It didnt allow me to replace the wsftpext.dll at 1st and had to test lots of ways how to replace it. This is how I did: 1. Follow the instr…...
二十三种设计模式全面解析-解密组合模式(Composite Pattern):构建统一而强大的对象结构
在软件开发中,面对复杂的对象结构和层次关系,我们常常需要一种能够统一处理单个对象和对象组合的设计模式。组合模式(Composite Pattern)提供了一种优雅而灵活的解决方案,它允许我们以统一的方式处理单个对象和对象组合…...
为什么路由器属于网络层
1. 路由器所属阶段 路由器属于 OSI 模型的网络层,因为它们负责根据网络层信息(第 3 层)做出路由决策。网络层是 OSI 模型中的第三层,主要负责将数据包从网络中的源路由到目的地。 Here’s a formal and precise explanation of …...
【0基础学Java第七课】-- 类和对象01
7. 类和对象 7.1 面向对象的初步认知7.1.1 什么是面向对象7.1.2 面向对象与面向过程 7.2 类定义和使用7.2.1 简单认识类7.2.2 类的定义格式7.2.3 定义一个狗类7.2.4 定义一个学生类 7.3 类的实例化7.3.1 什么是实列化7.3.2 引用只能指向对象,且不能同时指向多个对象…...
一个JS版寻路的实现
js版的寻路的测试 20231104_161146 path get_v8: function (x_inc, y_inc) {if (x_inc 0) {if (y_inc < 0) {return [[0, -1], [-1, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [1, 1], [0, 1]];} else if (y_inc > 0) {return [[0, 1], [-1, 1], [1, 1], [-1, 0], [1, 0…...
Java web应用的目录结构
详情可以参考: https://tomcat.apache.org/tomcat-10.1-doc/appdev/deployment.html https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#directory-structure Java web应用根目录下包含如下内容: *.html, *.jsp等…...
【Mac环境搭建】JDK安装、多JDK安装与切换
文章目录 JDK下载与安装下载安装 配置环境变量安装多个JDK共存 JDK下载与安装 下载 Oracle官网提供了非常多个版本的JDK供下载,可以点击如下链接重定向到JDK下载页面 ORACLE官网JDK下载 安装 下面的官方文档可以点开收藏到浏览器的收藏夹,这样后续在开…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
基于 HTTP 的单向流式通信协议SSE详解
SSE(Server-Sent Events)详解 🧠 什么是 SSE? SSE(Server-Sent Events) 是 HTML5 标准中定义的一种通信机制,它允许服务器主动将事件推送给客户端(浏览器)。与传统的 H…...
java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
