位运算总结

在这里插入图片描述

文章目录

    • 🍈1. 基础位运算
    • 🍌2. 给一个数`n`,确定它的二进制表示中的第`x`位是`0`还是`1`
    • 🍏3. 将一个数`n`的二进制表示的第`x`位修改成`1`
    • 🍓4. 将一个数的`n`的二进制表示的第`x`位修改成`0`
    • 🥔5. 位图的思想
    • 🫒6. 提前一个数`n`二进制中最右侧的`1`
    • 🫑7. 干掉一个数`n`二进制表示中最右侧的`1`
    • 🧄8. 运算符优先级
    • 🫘9. 异或`^`运算符的运算律

🍈1. 基础位运算

  • >>:右移操作符——二进制补码右移
  • <<:左移操作符——二进制补码左移
  • ~:按位取反操作符——二进制补码按位取反
  • &:按位与——有假则假(有00)
  • |:按位或——全真为真(全11)
  • ^:按位异或/无进位相加——相同为0,不同为1

不是很了解的可查看此篇文章:C语言——操作符(上)

🍌2. 给一个数n,确定它的二进制表示中的第x位是0还是1

我们先做一个约定:

计算几位几位的时候,从最低位开始(最右侧)

image-20231128194604799

这样的好处就是当我们要左移操作到最低位的时候,直接移动对应的第几位即可

那我们要确定这一位是0还是1,只需要让这个位置& 1即可,这里有两种方法:

  1. 1左移到这个对应的位置,再按位与,这个不常见
  2. 让这个位右移到最低位,然后& 1即可
(n>>x) & 1

🍏3. 将一个数n的二进制表示的第x位修改成1

这里我们让这个一位按位或| 1即可,然后其他位按位或| 0。想要这样,我们只需要将1左移x位即可1<<x

image-20231128200422309

🍓4. 将一个数的n的二进制表示的第x位修改成0

让当前位置按位与上& 0,只需要将1左移到对应位置,然后按位取反,即其他位置全是1,此时这个位置为0

image-20231128201954059

🥔5. 位图的思想

位图的本质其实就是一个哈希表,在大多数情况下都是一个数组,而位图则是用int的二进制位来记录信息。

那这样我们就经常要用到上面的三个思想,来查看或者修改这个二进制位。

关于位图的具体内容,可以查看此篇文章:位图bitset及其应用——【C++实现】

🫒6. 提前一个数n二进制中最右侧的1

这里直接让n & -n即可

-n就是按位取反再+1

image-20231128215419482

我们发现这个-n的操作,本质上其实就是将最右侧的1左边的区域全部变成相反

然后我们按位与下,那么这前面的区域就全部变为0了,这样就实现了将最右侧的1给提取出来了

🫑7. 干掉一个数n二进制表示中最右侧的1

这里的意思就是将最右侧的二进制1变为0,这里只需将n & (n-1)即可

这里n-1的本质就是如果后面是连续的0,则需要一直借位,直到借到1为止,借完之后要-1

image-20231128220252676

所有就是让最右侧的1作为分界线,右边的区域全部变成相反

🧄8. 运算符优先级

能加括号就加括号!这样一定不会错!

能加括号就加括号!这样一定不会错!

能加括号就加括号!这样一定不会错!

🫘9. 异或^运算符的运算律

  1. a^0= a
  2. a^a = 0 (消消乐)
  3. a ^ b ^ c = a ^ (b ^ c)

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

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

相关文章

医疗智能化:人工智能的助力与隐患

文章目录 引言&#xff1a;积极影响风险和挑战 结尾&#xff1a; 引言&#xff1a; 医疗领域正处于人工智能技术革新的前沿。人工智能的涌现为医疗保健带来了前所未有的变革&#xff0c;同时也潜藏着一系列积极影响和潜在挑战。探索人工智能在医疗领域中的影响将有助于我们更深…

医保移动支付程序开发

作为公司最苦命的开发&#xff0c;年初接到任务开发医保移动支付程序&#xff08;微信小程序和支付宝小程序&#xff09;&#xff0c;为医疗机构提供线上医保结算。好家伙&#xff0c;我一看解压后资料大于一个G&#xff0c;内心无比的惊慌。 一、技术流程图 图太大了显示不全需…

0-1背包的初始化问题

题目链接 这道题的状态转移方程比较易于确定。dp[i][j]表示能放前i个物品的情况下&#xff0c;容量为j时能放物品的数量&#xff08;这道题歌曲数量对应物品数量&#xff0c;容量对应时间&#xff09;。 技巧&#xff08;收获&#xff09; 二维dp数组可以视情况优化为一维dp数组…

【创建一个组件并通过npm让其他人安装和调用】

创建一个组件并通过npm让其他人安装和调用 步骤一&#xff1a;创建一个组件步骤二&#xff1a;准备发布步骤三&#xff1a;注册npm账号并登录步骤四&#xff1a;发布组件步骤五&#xff1a;安装和使用组件 步骤一&#xff1a;创建一个组件 在本地创建一个新的文件夹来存放你的组…

Linux——vim编辑文件时——.swp文件解决方案

test.cpp样例 当我们vim test.cpp进入编辑文件。 却忘记了保存退出 再次进入就会出现一下画面 当你摁下Enter键位 出现以下几个选项 O——是只读不写 E——是正常打开文件但不会载入磁盘内容 R——覆盖——是加载存储磁盘的文件(当我们忘记保存时&#xff0c;系统会自动帮我…

事件代理?

1.什么是事件代理&#xff1f; 事件代理也叫事件委托&#xff0c;只指定一个事件处理程序&#xff0c;就可以管理某一类型得事件。 可以简单理解为&#xff0c;事件代理就是将本应该绑定子元素事件绑定给父元素代理。它的优点就是&#xff1a;减少事件得执行&#xff0c;减少浏…

CentOS 7 部署 MariaDB 的 2 种方法

有两种安装 MariaDB 服务器的方法。您可以安装 CentOS 7 存储库中可用的默认版本&#xff0c;也可以通过手动添加 MariaDB 存储库来安装最新版本。 如果安装过MariaDB或MySQL&#xff0c;使用以下命令彻底删除它们: yum remove mariadb* yum remove mysql* 方法一: 使用 Yum…

[ Vue3 ] 三种方式实现组件数据双向绑定

Vue3 三种方式实现组件数据双向绑定 在 Vue 中&#xff0c;组件数据双向绑定是一项非常重要的特性&#xff0c;它使得我们能够轻松地在组件中处理数据的变化并将其同步到视图 比如我们想要在父组件中修改数据能够同步给子组件&#xff0c;并且子组件修改数据也能同步给父组件…

Make Pixels Dance: High-Dynamic Video Generation论文解析

高动态视频生成的新进展 Make Pixels Dance: High-Dynamic Video Generation高动态视频生成的新进展前言视频生成模式摘要论文十问实验数据集定量评估指标消融研究 训练和推理技巧训练技术推理技术 更多的应用 Make Pixels Dance: High-Dynamic Video Generation 高动态视频生…

VBA技术资料MF87:创建固定顺序名称的一组文件夹

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

gRPC Java、Go、PHP使用例子

文章目录 1、Protocol Buffers定义接口1.1、编写接口服务1.2、Protobuf基础数据类型 2、服务器端实现2.1、生成gRPC服务类2.2、Java服务器端实现 3、java、go、php客户端实现3.1、Java客户端实现3.2、Go客户端实现3.3、PHP客户端实现 4、运行效果 本文例子是在Window平台测试&a…

Unity UGUI图片锯齿严重怎么解决

在开发的时候&#xff0c;发现图片锯齿严重&#xff0c;打包到移动端或者在编辑器都这样&#xff0c;如下图 原因&#xff1a; 查了一些资料&#xff0c;找到了原因如下&#xff1a;关于为什么会发生这种情况&#xff1a;看起来你的源资源比你在屏幕上显示的大小大得多。所以当…

【迅搜04】索引配置(一)加载配置文件以及服务端配置

索引配置&#xff08;一&#xff09;加载配置文件以及服务端配置 对于一个搜索引擎来说&#xff0c;索引配置是非常重要&#xff0c;并且也是非常核心的内容。在 XS 中&#xff0c;我们的索引配置是通过一个配置文件来实现的。在前两篇文章的测试中&#xff0c;我们使用了一个叫…

深入浅出 Vue 中的插槽 slot

深入浅出 Vue 中的插槽 slot start 最近被问到好几次 Vue 中的插槽相关知识&#xff0c;掌握的还是有些不全面。抱着重新学习的心态&#xff0c;写这篇博客。首先对基础知识做一个回顾&#xff0c;然后再对源码实现做一个学习。作者&#xff1a;番茄编写时间&#xff1a;2023…

初始本地仓库推送到远程仓库-git

背景&#xff08;问题描述&#xff09; 下面的git的操作符合的情况是&#xff1a; ①本地初始化一个仓库&#xff0c;但是还没有和远程仓库相关联&#xff1b; ②远程仓库也刚刚创建&#xff0c;里面啥也没有 然后目前就想将本地的仓库的内容和远程仓库相关联并推送到远程仓…

Linux配置SFTP用户

0. 背景 Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个sftp用户账户对外暴露给业务人员使用。 下面是相关配置&#xff1a; SFTP 用户名&#xff1a;iios SFTP主目录&#xff1a;/data/tomcat/apache-tomcat-8.5.96/weba…

STM32_10(I2C)

I2C通信 I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09;同步&#xff0c;半双工带数据应答支持总线挂载多设备&#xff08;一主多从…

QAC支持的静态度量属性

上面介绍了Coverity支持的12个度量属性&#xff0c;下面我们看看QAC这款工具支持的度量属性。下面分成3类&#xff0c;函数度量、文件度量和类度量。 函数度量指标不多&#xff0c;一共有8个。 文件度量度量指标一共10个&#xff0c;如下表。 类度量指标一个8个&#xff0c;如…

事务一致性

数据库的并发控制与封锁 并发控制 并发控制是确保数据库在多个用户同时访问时保持数据一致性和完整性的机制。主要的并发控制技术包括&#xff1a; 锁定&#xff08;Locking&#xff09;&#xff1a;数据库通过对数据项加锁来限制对它们的访问。锁可以是共享的&#xff08;读…

python实现C++简易自动压行

突发奇想&#xff0c;想要将自己的c压行之后交上去。但是苦于手动压行效率太低&#xff0c;在网上搜索压行网站没有找到&#xff0c;突然发现压行不就是检查检查去个换行符吗。于是心血来潮&#xff0c;用python实现了一个简易压行程序。 首先&#xff0c;宏定义等带#的文件不…