常见位运算模板方法总结(包含五道例题)

news2024/11/28 11:50:06

哈喽大家好,今天博主给大家带来算法基础常见位运算的模板,可以说大家遇到的百分之九十与位运算有关的题都可以用得上。话不多上我们上干货:

一.基础位运算符

<<   左移运算符

>>   右移运算符

~      取反

&     与运算

|       或运算

^       或非

 对于前三个,我们都很熟悉,我们重点说一下后三位,既然我们标题说有模板,那么大家只要记住博主给大家总结口诀就可以了:

非常通俗易懂吧

&  :    0&0=1     1&0=0;        有0就是0

|           1 | 1=1     1 | 0=1;        有1就是1

^          1^1=0     1^0=1            相同为0,相异为1

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

n=0 1 1 0 1 0 1 0 0 1

首先第一个知识点是二进制最低位是右边,所以我们在计算的时候是从右边从零计数

比如我们选择第六位,想判断它是不是1,只要&1不就行了,如果结果是1,说明第六位是1,反之则0,怎么找到第六位,只要向右移动6位不就就行了么

模板:

        

(n>>x)&1

x是我们要查找的位数

如果大家没搞懂原理,直接用模板就可以,固定用法

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

n=0 1 1 0 1 0 1 0 1

仅将第x位修改成1,首先我们得用<<操作符把第x位移动到最低位,一直或运算是有1就为1,那么我们直接或等1不就行了

模板:

n|=(1<<x)

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

n=0 1 1 0 1 0 1 1 0 0

只要与上一条反着思考就行了

模板:

n&=(~(1<<x))

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

n = 0 1 1 1 0 1 0 1 0 0 0

根据n的二进制,最右侧的1在第四位,我们最后就是要把这个数变成这样:

模板:

n & -n

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

n = 0 1 1 0 1 0 0 1 0

提取后,n就会变成这样:

 

模板:

n&(n-1)

第五个模板和第六个模板对应的例题

由于五,六模板有一些抽象,下边博主给大家带来三道题,都是用这两个模板解决的题目,让大家更深刻的理解模板的用法以及应用场景:

leetcode191 位1的个数:

191. 位1的个数 - 力扣(LeetCode)

观察这个运算:n & (n−1)   其运算结果恰为把 n 的二进制位中的最低位的 1 变为 0 之后的结果。

 题解:

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int ret = 0;
        while (n) {
            n &= n - 1;
            ret++;
        }
        return ret;
    }
};

leetcod368 比特位计数

338. 比特位计数 - 力扣(LeetCode)

题解:

class Solution {
    public int[] countBits(int n) {
        int[] bits = new int[n + 1];
        int highBit = 0;
        for (int i = 1; i <= n; i++) {
            if ((i & (i - 1)) == 0) {
                highBit = i;
            }
            bits[i] = bits[i - highBit] + 1;
        }
        return bits;
    }
}

leetcode461汉明距离

461. 汉明距离 - 力扣(LeetCode)

class Solution {
public:
    int countOnes(int x) {
        int ones = 0;
        while (x > 0) {
            x &= (x - 1);
            ones++;
        }
        return ones;
    }

    vector<int> countBits(int n) {
        vector<int> bits(n + 1);
        for (int i = 0; i <= n; i++) {
            bits[i] = countOnes(i);
        }
        return bits;
    }
};

 八.异或运算符运算的运算律

给大家带来两道例题:

136. 只出现一次的数字 - 力扣(LeetCode)

题解:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret=0;
        for(auto i :nums) ret^=i;
        return ret;
    }
};

260. 只出现一次的数字 III - 力扣(LeetCode)

题解:

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        long long xs = 0;
        for (int& x : nums) {
            xs ^= x;
        }
        int lb = xs & -xs;
        int a = 0;
        for (int& x : nums) {
            if (x & lb) {
                a ^= x;
            }
        }
        int b = xs ^ a;
        return {a, b};
    }
};

 

好的,常见的所有位运算的模板都给大家列在这篇博客了,希望有帮助大家不要吝啬自己手里的关注呀。

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

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

相关文章

23种设计模式Python版

目录 创建型模式简单工厂模式工厂方法模式抽象工厂模式单例模式原型模式建造者模式 结构型模式适配器模式桥接模式组合模式装饰器模式外观模式享元模式代理模式 行为型模式职责链模式命令模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模板方法模式访…

CUMT--Java复习--核心类

目录 一、装箱与拆箱 二、“”与equals 三、字符串类 1、String、StringBuffer、StringBuilder的区别 2、String类 3、StringBuffer类 4、StringBuilder类 四、类与类之间关系 一、装箱与拆箱 基本类型与对应封装类之间能够自动进行转换&#xff0c;本质就是Java的自…

【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解&#x1f30f;题目描述&#x1f4a1;题…

论文速递|Management Science 11月文章合集(下)

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 编者按 在本系列文章中&#xff0c;我们梳理了运筹学顶刊Management Science11月份发布的47篇文章的基本信息&#xff0c;旨在帮助读者快速洞察行业最新动态。本文为第三部分。 文章1 ● 题目&#xff1a;…

Linux:apache优化(7)—— 访问控制

作用&#xff1a;为apache服务提供的页面设置客户端访问权限&#xff0c;为某个组或者某个用户加密访问&#xff1b; /usr/local/httpd/bin/htpasswd -c /usr/local/httpd/conf/htpasswd tarro1 #添加admin用户&#xff0c;可以在两个路径中间添加-c是新建文件删除原文件&#…

当你的电脑在安装Windows更新后出现问题时怎么办,这里提供办法

Windows更新通常会为你的电脑带来错误修复、安全补丁和新功能,但它们也可能会带来性能下降甚至引发恐慌的数据丢失等问题,从而适得其反。如果你在安装更新后发现了一些奇怪之处,你可以将其回滚,尝试重新启动。 Windows更新主要有两种:质量更新和功能更新。高质量的更新包…

16.综合项目实战

一、基础演练&#xff1a; 1、建库、建表 # 创建数据库 create database mysql_exampleTest; use mysql_exampleTest; # 学生表 CREATE TABLE Student( s_id VARCHAR(20), s_name VARCHAR(20) NOT NULL DEFAULT , s_birth VARCHAR(20) NOT NULL DEFAULT , s_sex VARC…

RocketMQ(Linux版本5.1.4)

1、停止之前的运行服务 [roottssvr1-c1 rocketmq-all-4.7.0-bin-release]# sh bin/mqshutdown namesrv No mqnamesrv running. [roottssvr1-c1 rocketmq-all-4.7.0-bin-release]# [roottssvr1-c1 rocketmq-all-4.7.0-bin-release]# [roottssvr1-c1 rocketmq-all-4.7.0-bin-r…

【编译原理】期末预习做题向I

新的一年希望可以成为更好的人嘿嘿&#xff01; 这一篇基本就是把 up 讲的题都截了一遍然后加了点自己的笔记啥的 O.o &#xff08;不妥的话会删掉的 qwq&#xff0c;希望没事嘿嘿&#xff09; 来源&#xff1a;混子速成 I. 绪论 记住组成部分 II. 前后无关文法和语言 1.…

[C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计

源码地址&#xff1a; github地址&#xff1a;https://github.com/Ahmednull/L2CS-Net L2CS-Net介绍&#xff1a; 眼睛注视&#xff08;eye gaze&#xff09; 是在各种应用中使用的基本线索之一。 它表示用户在人机交互和开放对话系统中的参与程度。此外&#xff0c;它还被用…

zabbix监控基础

目录 一.zabbix概述 1.zabbix程序结构 2.Zabbix 监控原理 3.zabbix中核心的资源介绍 4.zabbix-agent支持的协议 二.zabbix监控环境搭建 1.zabbix服务器端 1) 基本配置 2) 安装 2.配置zabbix 1) 数据库设置 2) zabbix设置 3) ph…

轻量应用服务器与云服务器CVM对比——腾讯云

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

Android 跨进程之间通信(IPC)方式之ContentProvider

Android 跨进程之间通信 Android 跨进程之间通信(IPC)方式之BroadcastReceiverAndroid 跨进程之间通信(IPC)方式之ContentProvider 文章目录 Android 跨进程之间通信前言一、ContentProvider 是什么&#xff1f;二、如何利用ContentProvider跨进程通信1.创建自定义ContentProv…

编译原理----FIRST集,LARST集,FIRSTVT集,LASTVT集

目录 FIRST集&#xff1a; LARST集&#xff1a; FIRSTVT集: LASTVT集&#xff1a; 构造规则&#xff1a; FIRST集&#xff1a; &#xff08;1&#xff09;A-->&#xff0c;若是终结符&#xff0c;那么FIRST&#xff08;A&#xff09;&#xff0c;若是非终结符&#xf…

啊哈c语言——逻辑挑战6:奔跑的小人

首先我们来设计这个小人&#xff1a; 将这个小人身体的三部分分为3行来分别表示&#xff1a; 第1行用一个大写字母O表示小人的脑袋。 第2行用左尖括号表示小人的右手&#xff0c;用大写字母H表示小人的身 体&#xff0c;用右尖括号>表示小人的右手。 第3行用两个大写字母…

集群部署篇--Redis 集群分片模式

文章目录 前言一、Redis 分片集群介绍1.1 介绍&#xff1a;1.2 工作机制&#xff1a;1.2.1 节点&#xff1a;1.2.2 槽 slot&#xff1a;1.2.3 故障转移&#xff1a; 二、Redis 分片集群搭建:2.1 配置文件&#xff1a;2.2 redis 部署&#xff1a;2.3 redis 集群创建&#xff1a;…

杂文月刊投稿方式论文发表要求

《杂文月刊》是由国家新闻出版总署批准的正规文学类期刊。主要内容取向&#xff1a;杂文、散文、小说、诗歌、漫画、文学评论、艺术评论、戏剧文化、地方文化、非遗文化、美学艺术、教育等历史、文化、文学、艺术类的文章。是广大专家、学者、教师、学子发表论文、交流信息的重…

2024年人工智能领域10大预测

2023年人工智能领域如果只能筛选一个关键词的话&#xff0c;恐怕非“大模型”莫属。大模型的发展在过去一年中&#xff0c;让各行各业发生了天翻地覆的变化&#xff0c;有企业因大模型而新生&#xff0c;有企业因大模型而消亡。企业的变迁跟技术迭代息息相关&#xff0c;而大模…

前端 js 基础(1)

js 结果输出 &#xff08;点击按钮修改文字 &#xff09; <!DOCTYPE html> <html> <head></head><body><h2>Head 中的 JavaScript</h2><p id"demo">一个段落。</p><button type"button" onclic…

【2023】hadoop基础介绍

&#x1f4bb;目录 Hadoop组成HDFSHDFS操作HDFS分布式文件存储NameNode元数据数据读写流程 YARN和MapReduceMapReduce&#xff1a;分布式计算YARN&#xff1a;资源管控调度YARN架构提交任务到**YARN中运行** Hadoop组成 hadoop安装教程可以看我这篇文章> &#x1f345;hado…