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

基础知识:位运算

基础知识:位运算

  • 1. 两类表达式
  • 2. 项目中用到位运算的🌰

1. 两类表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 项目中用到位运算的🌰

在一个表中增加一个字段,控制报餐的6个字段包括午餐、晚餐、夜餐1、夜餐2、白班、晚班。正常在表中需要增加6个字段来做开关,但现在通过位运算只需要加一个字段。

具体的步骤如下:

  1. 定义一个整型变量,用于存储开启状态的位掩码。假设该变量名为stateMask

  2. 对于每个字段,定义一个与之对应的位掩码值,并使用<<运算符将其左移相应位置。假设这些字段的位掩码变量名分别为dayshiftMasknightshiftMasklunchMaskdinnerMasknight1Masknight2Mask

  3. 在设置字段的开启状态时,使用stateMask与对应的位掩码进行按位或操作,即使用|运算符。例如,要设置dayshift_time字段的开启状态,使用stateMask |= dayshiftMask;

  4. 在关闭字段的开启状态时,使用stateMask与对应的位掩码进行按位与操作,然后再取反,即使用~运算符。例如,要关闭nightshift_time字段的开启状态,可以使用stateMask &= ~nightshiftMask;

  5. 检查字段的开启状态时,使用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. 这种设置可以实现对多个字段的开启与关闭状态的控制,是因为它利用了位运算的特性和位掩码的概念。

  2. 在这个设置中,每个字段都有一个对应的位掩码,通过将位掩码与状态掩码进行按位与或按位非的操作,可以实现对字段的开启和关闭。

  3. 具体来说,每个字段的位掩码是一个唯一的二进制值,其中只有一个位为1,其余位为0。位掩码可以通过左移操作符<<来生成,将1左移相应的位数。

  4. 当要将某个字段设置为开启状态时,将该字段的位掩码与状态掩码进行按位或操作,相当于将该位设置为1,其他位保持不变。这样就能表示该字段为开启状态。

  5. 当要将某个字段设置为关闭状态时,将该字段的位掩码取反后与状态掩码进行按位与操作,相当于将该位设置为0,其他位保持不变。这样就能表示该字段为关闭状态。

  6. 通过按位与运算,可以将状态掩码中的1只保留在对应位为1的字段的位掩码上,其他位都变为0。然后再进行条件判断,若结果不为0,则表示对应的字段为开启状态。

  7. 这种方式可以节省存储空间,每个字段的开启状态只占用一个位,而不是使用额外的布尔值或整型来记录每个字段的状态。同时,通过位运算,可以很方便地实现对多个字段的同时开启和关闭。

相关文章:

基础知识:位运算

基础知识&#xff1a;位运算 1. 两类表达式2. 项目中用到位运算的&#x1f330; 1. 两类表达式 2. 项目中用到位运算的&#x1f330; 在一个表中增加一个字段&#xff0c;控制报餐的6个字段包括午餐、晚餐、夜餐1、夜餐2、白班、晚班。正常在表中需要增加6个字段来做开关&…...

Android菜单Menu详解

菜单资源文件通常放置在res\menu目录下&#xff0c;在创建项目时&#xff0c;默认不自动创建menu目录&#xff0c;所以需手动创建。 Android Resource Directory→ value menu 或在创建根元素为<menu></menu>标记的xml文件对自动气建眼 res→Android Resounce File…...

win10 + cmake3.17 + vs2017编译osgearth2.7.0遇到的坑

坑1&#xff1a;debug模式下生成osgEarthAnnotation时 错误&#xff1a;xmemory0(881): error C2440: “初始化”: 无法从“std::pair<const _Kty,_Ty>”转换为 to _Objty 出错位置&#xff1a;src/osgEarthFeatures/FeatureSourceIndexNode.cpp 解决办法&#xff1a; …...

【Linux网络编程_TCP/UDP_字节序_套接字 实现: FTP 项目_局域网聊天项目 (已开源) 】.md updata:23/11/05

文章目录 TCP/UDP对比端口号作用字节序字节序转换api套接字 socket实现网络通讯服务端 逻辑思路demo&#xff1a; 满血版双方通讯/残血版多方通讯 &#xff08;配合进程实现&#xff09;服务端 demo客户端 demo FTP 项目实现sever demo:client demo: 局域网多方通讯 &#xff0…...

SpringBoot日志基础

1.yml 说明&#xff1a;配置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:受益于人工智能,必被人工智能反噬

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Adobe(ADBE)受益于生成式人工智能的兴起&#xff0c;其一直能实现两位数的收入增长就证明了这一点。 &#xff08;2&#xff09;在生成式人工智能兴起时&#xff0c;该公司就快…...

VScode配置 github 上传代码

初始化&#xff0c;设置用户名和密码 # 设置你的 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=“文本“`)

本文只讲导出&#xff0c;导入可以参考不同MySQL服务的表以及库的数据迁移&#xff08;/备份&#xff09;-CSDN博客 现在先查下migration_one.table_11里有什么&#xff1a; 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 四、写在最后 一、前言 随着移动互联网的发展&#xff0c;AP…...

【洛谷 P1303】A*B Problem 题解(高精度+字符串)

A*B Problem 题目描述 给出两个非负整数&#xff0c;求它们的乘积。 输入格式 输入共两行&#xff0c;每行一个非负整数。 输出格式 输出一个非负整数表示乘积。 样例 #1 样例输入 #1 1 2样例输出 #1 2提示 每个非负整数不超过 1 0 2000 10^{2000} 102000。 思路 …...

计算机网络(43)

目录 计算机网络学习 1、OSI 七层网络模型&#xff0c;你了解吗&#xff1f;具体功能有哪些&#xff1f; 2、TCP/IP四层模型&#xff1f; 3、说一下TCP的三次握手&#xff1f; 4、为什么要三次握手&#xff1f;两次行不行&#xff1f;四次呢&#xff1f; 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):构建统一而强大的对象结构

在软件开发中&#xff0c;面对复杂的对象结构和层次关系&#xff0c;我们常常需要一种能够统一处理单个对象和对象组合的设计模式。组合模式&#xff08;Composite Pattern&#xff09;提供了一种优雅而灵活的解决方案&#xff0c;它允许我们以统一的方式处理单个对象和对象组合…...

为什么路由器属于网络层

1. 路由器所属阶段 路由器属于 OSI 模型的网络层&#xff0c;因为它们负责根据网络层信息&#xff08;第 3 层&#xff09;做出路由决策。网络层是 OSI 模型中的第三层&#xff0c;主要负责将数据包从网络中的源路由到目的地。 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 引用只能指向对象&#xff0c;且不能同时指向多个对象…...

一个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应用的目录结构

详情可以参考&#xff1a; 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应用根目录下包含如下内容&#xff1a; *.html, *.jsp等&#xf…...

【Mac环境搭建】JDK安装、多JDK安装与切换

文章目录 JDK下载与安装下载安装 配置环境变量安装多个JDK共存 JDK下载与安装 下载 Oracle官网提供了非常多个版本的JDK供下载&#xff0c;可以点击如下链接重定向到JDK下载页面 ORACLE官网JDK下载 安装 下面的官方文档可以点开收藏到浏览器的收藏夹&#xff0c;这样后续在开…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...