算法题中常用的位运算

news2024/11/24 12:56:08

文章目录

    • 为什么使用位运算?
    • 十进制和二进制之间的转化
      • 短除法(十进制转二进制)
      • 幂次和(二进制转十进制)
    • 位运算符
      • 异或运算(xor)
      • 指定位置的位运算
      • 位运算实战要点

为什么使用位运算?

机器采用二进制对数值进行表示、存储和运算,在程序中恰当的使用二进制,可以提高运行效率。

十进制和二进制之间的转化

短除法(十进制转二进制)

示例:7的二进制是多少?
第一步: 7 除以 2 等于 3,余数为 1;
第二步: 3 除以 2 等于 1,余数为 1;
第三步: 1 除以 2 等于 0,余数为 1;
等于0时停止,倒着把余数连起来就是二进制,如上:7的二进制为 111。

幂次和(二进制转十进制)

示例:将二进制1101转为十进制是多少?
2^3 + 2^2 + 2^0 = 8 + 4 + 1 = 13

位运算符

算法题中常用的位运算

注:在Java中,>> 为算术右移,移动时最高位补符号位,不一定是0。如果是负数(即最高位符号位为1)。
如果需要右移时最高位补0,忽略符号位,那么应该使用逻辑右移 >>>,多了一个尖括号 。

异或运算(xor)

相同为0,不同为1。

异或运算的特点和应用:

  • x ^ 0 = x : 一个数与0异或,结果还是其自己。
  • x ^ x = 0 : 一个数与自己异或,结果为0。
  • 结合律: a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
  • 成对变换:(0 ^ 1 = 1, 1 ^ 1 = 0), (2 ^ 1 = 3, 3 ^ 1 = 2), (4 ^ 1 = 5, 5 ^ 1 = 4) … (2n ^ 1 = 2n + 1, (2n + 1) ^ 1 = 2n)
  • 交换两个数: 如交换a与b, a = a ^ b; b = a ^ b; a = a ^ b;
    1. a = a ^ b;
    2. b = a ^ b = a ^ b ^ b = a ^ (b ^ b) = a ^ 0 = a;
    3. a = a ^ b = a ^ b ^ a = a ^ a ^ b = 0 ^ b = b;

指定位置的位运算

二进制数,从右边数的第 n 位, n 从 0 开始。

  • 获取 x 在二进制下的第 n 位:(x >> n)& 1
  • 将 x 在二进制下的第 n 位设置为 1 :x | (1 << n)
  • 将 x 在二进制下的第 n 位设置为 0 :x & (~(1 << n))
  • 将 x 在二进制下的第 n 位取反:x ^ (1 << n)
  • 将 x 最右边的 n 位清零:x & (~0 << n)
  • 将 x 的最高位到第 n 位(包含)清零:x & ((1 << n) - 1)

位运算实战要点

判断奇偶:

  • 偶数:x % 2 == 0 => (x & 1) == 0
  • 奇数:x % 2 == 1 => (x & 1) == 1

除以2的幂次:

  • x / 2 = x >> 1
  • x / 2 ^ n = x >> n: x 除以 2 的 n 次方 等于 x 右移 n 位。
  • mid = (left + right) / 2 = (left + right) >> 1

最低位:

  • 得到最低位的1: x & -x 或 x & (~x + 1)
  • 清零最低位的1: x & (x - 1)

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

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

相关文章

代码随想录刷题记录day46 最长公共子序列+不相交的线+最大子数组和

代码随想录刷题记录day46 最长公共子序列不相交的线最大子数组和 1143. 最长公共子序列 思想 1.dp数组的定义 dp[i][j]表示 以i-1为结尾的字符串text1和以j-1为结尾的字符串2的最长公共子序列长度 2.递推公式 如果text1.charAt(i-1)text2.charAt(j-1) dp[i][j]dp[i-1][j-1…

TS 对象可能为“未定义”,不能将类型“ XXXX | undefined “分配给类型{ xxxx }

前言&#xff1a; 最近用 typeScript &#xff0c;也就是大家常说的 【 TS 】写点东西&#xff0c;但是老是提醒这个未定义&#xff0c;那个可能为空&#xff0c;主要是 tsconfig.json 中的严格模式我没关&#xff0c;所以今天总结一下&#xff0c;严格模式中【TS】中遇到 对象…

Learning Disentangled Label Representations for Multi-label Classification

Learning Disentangled Label Representations for Multi-label Classification&#xff0c;2022 学习多标签分类的解纠缠标签表示 要点&#xff1a; 1、主流多标签分类&#xff1a;遵循单标签&#xff08;多类别&#xff09;分类的特征学习机制——学习一个共享的图像特征来…

【Vue实践】尚硅谷张天禹Vue学习笔记(087-135)-20221212~20221218

&#xff08;任意组件通信&#xff09;084-086_全局事件总线 全局事件总线SOP 086_TodoList案例_事件总线 src/mian.js: import Vue from vue import App from ./App.vueVue.config.productionTip falsenew Vue({el:"#app",render: h > h(App),beforeCreate()…

docker高级篇第二章-分布式存储之实战案例:3主3从redis集群搭建

在上一篇文章中&#xff0c;我们介绍了分布式存储的三种方式&#xff1a;hash取余分区、一致性哈希算法分区以及哈希槽分区。本篇&#xff0c;我们就来实战3主3从的哈希槽Redis集群搭建。 大家好,我是凯哥Java(kaigejava)&#xff0c;乐于分享&#xff0c;每日更新技术文章&…

【Redis深度专题】「核心技术提升」分析探究如何实现LFU的热点key发现机制以及内部的Scan扫描技术的原理

前言介绍 业务中存在访问热点是在所难免的&#xff0c;redis也会遇到这个问题&#xff0c;然而如何发现热点key一直困扰着许多用户&#xff0c;redis4.0为我们带来了许多新特性&#xff0c;其中便包括基于LFU的热点key发现机制。 Least Frequently Used Least Frequently Us…

基于节点导纳矩阵的三相配电系统建模(Matlab实现)

目录 1 概述 2 算例仿真 2.1 IEEE 37节点测试 2.2 EEE 123 节点测试 2.3 500 节点测试 2.4 906 母线低压馈线 2.5 小节 3 Matlab代码实现 1 概述 本文的主要是适用于 Z-Bus 潮流的三相配电系统建模。提供了星形和三角形恒功率、恒电流和恒阻抗负载的详细模型。布置了…

无线投屏(智慧教室)

大家好&#xff0c;我是小杜&#xff0c;打工人又开始了这一周的“搬砖”了。周末两天很好的“休息”后&#xff0c;今天浑身充满了干劲&#xff0c;都可以打死一头“牛”&#xff0c;从今天开始就要参与公司的一些业务了&#xff0c;剩余时间就是打工人最喜欢的学习时间了。 …

Nacos系列——Java SDK(2.x版本)2-1

Nacos系列——Java SDK&#xff08;2.x版本&#xff09;2-1资源地址README概述&#xff08;intro&#xff09;Nacos Java SDK 官方文档(official doc address)工程说明&#xff08;project intro &#xff09;工程目录&#xff08;project dir&#xff09;pom依赖(pom dependen…

面向切面编程

Spring AOP简介 AOP把业务功能分为核心、非核心两部分。 核心业务功能&#xff1a;用户登录、增加数据、删除数据。非核心业务功能&#xff1a;性能统计、日志、事务管理。 在Spring的面向切面编程&#xff08;AOP&#xff09;思想里&#xff0c;非核心业务功能被定义为切面。…

Springboot+echarts:ajax前后端分离交互

文章目录一、样例说明二、后端代码实现2.1 依赖2.2 applicaiton.properties配置2.3 TotalCountData类实现2.4 totalCountDataMapper接口2.5 totalCountDataMapper.xml实现2.6 Controller层代码三、前端代码一、样例说明 通过mysql存储数据&#xff0c;springboot整合mybatis框…

从云到「链」,京东云成为中国第四朵云背后

在产业加速到数实融合加速的今年&#xff0c;云计算不再是云厂商的唯一考校指标。 作者|叶子 出品|产业家 京东云再次破圈。 信号来自接连发布的几份报告。在国际权威研究机构Forrester发布的名为《The Forrester Wave&#xff1a;Public Cloud Development And Infrast…

[HCTF 2018]WarmUp

目录 考点 writeup 考点 文件上传漏洞&#xff0c;代码审计 writeup 先进入页面先查看源码 发现source.php,打开该php文件&#xff0c;进行审计代码后发现是文件包含类题目 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$…

JaveWeb框架(三):实战项目Servlet 实现管理系统登录注册功能

MVC实战项目 仓储管理系统需求&#xff1a;实现基本的登录和注册功能MVC实战项目&#xff1a;登录和注册登录功能实现注册功能实现总结Redis章节复习已经过去&#xff0c;新的章节JavaWeb开始了&#xff0c;这个章节中将会回顾JavaWeb实战项目 仓储管理 代码会同步在我的gitee中…

Linux内核调试技术之kdump配置与使用

概述 kdump是Linux内核发生崩溃时转储内存的一种机制&#xff0c;当内核发生错误时&#xff0c;kdump会将当前内核使用的内存导出为镜像文件&#xff08;通常为vmcore&#xff09;保存到硬盘上&#xff0c;之后可以使用crash等工具对内核错误原因进行分析。 kdump基本原理 k…

R语言中回归和分类模型选择的性能指标

有多种性能指标来描述机器学习模型的质量。但是&#xff0c;问题是&#xff0c;对于问题正确的方法是什么&#xff1f;在这里&#xff0c;我讨论了选择回归模型和分类模型时最重要的性能指标。请注意&#xff0c;此处介绍的性能指标不应用于特征选择&#xff0c;因为它们没有考…

如何保证分布式事务?

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【一心同学】&#xff0c;一位上进心十足的【Java领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; ✨【一心同学】的写作风格&#x…

Docker: 容器与镜像

文章目录1、docker 环境搭建1.1、docker 安装1.1.1、centos 安装1.1.2、ubuntu 安装1.2、添加到 docker 组1.3、docker 镜像源2、docker 概念2.1、docker 背景2.2、docker 架构2.3、docker 与 vm3、docker 容器隔离4、docker 命令4.1、环境信息4.2、日志信息4.3、容器命令4.4、…

Mac最先进的API工具-RapidAPI for Mac

一、前言 当使用 Mac 进行接口测试的时候&#xff0c;一般都会想到接口测试工具 Postman、Jmeter。 Postman 以其页面友好&#xff0c;功能简单&#xff0c;可以快速上手进行接口测试。而 Jmeter 除了测接口外&#xff0c;还可以进行接口自动化测试、性能测试等。 本篇将介绍…

完整企业官网源码,前端基于Vue+ElementUI,后台基于基于core3 webapi,含数据库文件,含详情安装部署文档

完整企业官网源码&#xff0c;前端基于VueElementUI&#xff0c;后台基于基于core3 webapi&#xff0c;含数据库文件&#xff0c;含详情安装部署文档 完整代码下载地址&#xff1a;完整企业官网源码 某工程管理有限公司企业官网 前端 新版本改进 整体重构&#xff0c;结构…