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

常见的位运算的总结

左移:<< :每左移 1 位右侧补 1 个 0,移出去的数字舍去。
右移:>> :每右移 1 位,舍弃最右侧的位,最左侧补 0(正数场景)。(负数则在最左侧补1)
按位取反:~
按位与:&(有0则0)
按位或:|(有1则1)
按位异或:^(相同为0,相异为1


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

如上图所示,第二行的数字就表示这个数字的第x位。
解决办法:
(n>>x)&1
上述运算式的结果是0,则第x位是0,反之则为1。

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

解决办法:
n=n|(1<<x)

我们以把上图中的数n的第3位修改为1为例来讲解:

由于我们只想把第x位修改为1,同时要保持其他位上的数字不变。
所以我们可以让n|m,因为|的规则是有1则1。而由于m这个数字除了第x位是1之外,其他位上的数字都是0,这样就可保证第x位在经过运算之后一定是1。
而其他位上的数字在运算过后的结果是几,就取决于原来该位上的数字是多少了。
现在的问题是m这个数如何获得,其实也很简单:m=1<<x

综上所述,这个问题的解决办法就是:n=n|(1<<x)

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

解决办法:
n=n&(~(1<<x))

我们以把n的第4位修改为0为例。
我们只需要让n&m,就可以得到这个结果。
这是由于&的运算规则是有0则0,然而m的第x为恰好是0,这就可以保证当n&m的时候,这一位的结果肯定是0。
而其他位的结果是多少就有n原来那个数位上是多少来决定了。
而m=~(1<<x)。
所以这个问题的解决办法就是n=n&(~(1<<x))

提取一个数(n)二进制表示中最右侧的1

解决办法:
n&(-n)

上图中的m就是-n,由此可见-n就是把n的最右侧的1左边的区域全部都按位取反。
这样再进行&操作的时候,最右侧的1左边的区域的数字就都变成了0。
这样经过&运算之后,我们就可以提取出来n的最右侧的1了。

 消除一个数(n)二进制表示中最右侧的1

解决办法:
n&(n-1)

由此可见m(n-1)就是把n的最右侧的1的右边的区域(包括这个1)全部按位取反
这样再进行&运算之后,就可以把最右侧的1消除掉。

异或(^)运算的运算律

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

运用这个运算律我们可以解决LeetCode上编号为136和260这两个题。

http://www.dtcms.com/a/502951.html

相关文章:

  • CSRF(跨站请求伪造)攻击详解:原理、途径与防范
  • 【C++】使用双指针算法习题
  • 全能型 AI 模型新标杆 Qwen2.5-Omni
  • 建设银行佛山分行网站wordpress插件 评分
  • 大数据计算引擎-从源码看Spark AQE对于倾斜的处理
  • 前端基础知识---Ajax
  • 数据结构——多维数组的存储
  • 编译django做的网站网站制作 价格
  • 破解商家客服困局:真人工AI回复如何成为转型核心
  • 【Qt开发】多元素类控件(二)-> QTableWidget
  • 如何建设一个优秀的电商网站自己怎么创建微信公众号
  • 【成长纪实】Flutter中Dart 与Harmony中 ArkTS 异步编程对比:从 Future 到 Promise
  • ARMv7-A 移植 FreeRTOS 栈帧初始化
  • ARMv7-A 移植 FreeRTOS 中断和临界区管理
  • STM32中PB4引脚作普通GPIO使用的一个小问题
  • 网站怎么看哪个公司网站建设海口网站开发制作
  • 【踩坑记录】从“正在还原所需的工具包”说起:一次 .NET 工程包还原失败的完整排查实录
  • 阳山做网站什么网站做视频
  • 虚幻引擎虚拟制片入门教程目录
  • Eclipse 快速修复指南
  • 【从0开始学习Java | 第22篇】反射
  • WEBSTORM前端 —— 第5章:Web APIs —— 第1节:Dom获取属性操作
  • 第 167 场双周赛 / 第 471 场周赛
  • 聊聊 Unity(小白专享、C# 小程序 之 加密存储)
  • 如何推销网站分销商城开发多少钱
  • 大型的营销型网站建设做国外网站翻译中国小说赚钱
  • 论文学习_PalmTree: Learning an Assembly Language Model for Instruction Embedding
  • 基于PSO-BP粒子群优化神经网络+NSGAII多目标优化算法的工艺参数优化、工程设计优化(三个输出目标案例)!(Matlab源码和数据)
  • 端到端与世界模型(2):基于认知驱动的自动驾驶3.0
  • [嵌入式系统-143]:自动驾驶汽车与智能机器人的操作系统