位运算(更新中)

news2024/9/20 22:57:49

一、基础知识

1.基础位运算

        <<  左移操作符                     &按位与     有0就是0   

        >>右移操作符                       |  按位或       有1就是1             

        ~按位取反                           ^异或            相同为1,相异为0 / 无进位相加

                                                    例如     1 0 1 1 0 1   ^

                                                                 1 1 0 1 1 0    

                                                     结果为 0 1 1 0 1 1,无进位相加就是1 + 0 = 0,1+1 = 0,但是不会向高位进位

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

我们规定从右往左,的位数为第0,1,2,3,4,5.....31位

这样右移动的距离等于它的位数

(n >> x) & 1   ->  0 ------ 0

                           1 ------ 1

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

                                                                n = n | (1 << x)

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

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

5.位图的思想

                                                  每个比特位0或者1的数值表示一种状态

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

                                                lowbit = n & -n(取反加一即变为负)

7.将一个数n二进制表示中最右侧的1抹去

                                        n = n & (n - 1)

8.位运算的优先级

        能加括号就加括号

9.异或 ^,运算的运算律

1.a ^ a = 0

2.a ^ 0 = a

3.a ^ b ^ c = a ^ (b ^ c)

二、基础题目示例

1.位1的个数

. - 力扣(LeetCode)

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

        将要判断的数每次按位与1,若为1则此位为1,然后再右移一位

2.比特位计数

. - 力扣(LeetCode)

class Solution {
public:
    int Add(int i)
    {
        int ret = 0;
        int n = 32;
        while(n > 0)
        {
            if((i & 1) == 1)ret++;
            i  = i >> 1;
            n--;
        }
        return ret;
    }
    vector<int> countBits(int n) {
        vector<int>ret(n+1,0);
        for(int i = 0; i <= n;i++)
        {
            ret[i] = Add(i);
        }
        return ret;
    }
};

        原理同上,只是多了一个循环

3.汉明距离

. - 力扣(LeetCode)

class Solution {
public:
    int hammingDistance(int x, int y) {
        int n = 32;
        int ret = 0;
        while(n>0)
        {
            if((x & 1) != (y & 1))ret++;
            x = x >> 1;
            y = y >> 1;
            n--;
        }
        return ret;
    }
};

        分别用 &1 来判断两个数最低位是0还是1,对两个数进行比较,然后分别不断右移这两个数

4.只出现一次的数字

. - 力扣(LeetCode)

        利用异或的性质即可

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

5.只出现一次的数字3

. - 力扣(LeetCode)

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        long long n = 0;
        for(auto ch: nums)
        {
            n ^= ch;
        }
        long long mask = n &(-n);
        mask = (int)mask;
        vector<int>ret(2,0);
        for(auto ch: nums)
        {
            if((ch & mask) == mask)ret[0] ^= ch;
            else ret[1] ^= ch;
        }
        return ret;
    }
};

        我们先将所有值异或,这个过程会将相同的数都消去,最后得到两个不同的数a,b异或的结果。

        这个数为1的位置,是两个数上值不同的位置。为了方便,我们取出最右侧的1。

        a,b两个数中,一个数的该位置为1,一个数为0.

        而待分开的数的该位置也一定为1或0.因此我们将全部数分为两组

        a,xx  yy zz                                b,mm,nn,oo

        这样即可分别取出单独的数

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

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

相关文章

大模型检索X一键成片,巴黎奥运的AI新演绎

媒体智能与巴黎奥运的一场邂逅。 随着巴黎奥运会开幕式为全世界掀起一场文艺浪潮&#xff0c;塞纳河畔也从浪漫艺术的盛宴&#xff0c;转向体育竞技的击攘。让全世界不可错过巴黎前方的每刻高光&#xff0c;更需要一场多媒体技术的迎赶革新。 于是&#xff0c;我们看到另一场媒…

现代前端架构介绍(第三部分):深入了解状态管理层及其对前端App的影响

远离JavaScript疲劳和框架大战&#xff0c;了解真正重要的东西 在第二部分中&#xff0c;我们讨论了功能架构的三个层次。其中一个就是状态管理层&#xff0c;今天我们将对其进行更深入的探讨。下面是现代前端架构系列的第三部分和最后一部分介绍。 状态管理&#xff0c;你可能…

抖音视频素材一般都从哪里找?抖音视频素材库分享

在浏览抖音时&#xff0c;你是否曾被那些内容丰富、制作精良的视频所吸引&#xff1f;这些视频背后的秘密其实非常简单——高质量的视频素材。优质素材能够让你的视频更加出彩。然而&#xff0c;许多抖音内容创作者在初期可能会困惑&#xff1a;这些视频素材究竟从哪里获取呢&a…

实现生成二维码,在table显示,图片预览可下载

utils/images/downLoadRemoteFile.js /*** 获取 blob 实现不跳转下载* param {String} url 目标文件地址* return {Promise}*/ const getBlob (url) > {return new Promise(resolve > {const xhr new XMLHttpRequest();xhr.open(GET, url, true);xhr.responseType b…

怎么恢复U盘里被隐藏的数据?三招助找回“消失”数据

随着信息技术的飞速发展&#xff0c;U盘已成为我们日常生活中不可或缺的数据存储设备。然而&#xff0c;有时我们会遇到一些棘手的问题&#xff0c;比如U盘中的数据莫名其妙地被隐藏了&#xff0c;这不仅影响了我们的工作效率&#xff0c;还可能导致重要信息的丢失。那么&#…

Linux 照片图像编辑器

前言 照片图像编辑器是一种软件程序,它允许用户对数字照片或图像进行各种编辑和修改。以下是一些常见的功能及其解释: 裁剪与旋转 : 裁剪:移除图像的某些部分,以改善构图或符合特定尺寸要求。旋转:改变图像的方向,可以校正歪斜的照片或者为了艺术效果而旋转。调整亮度…

CC++:贪吃蛇小游戏教程

❀创作不易&#xff0c;关注作者不迷路❀&#x1f600;&#x1f600; 目录 &#x1f600;贪吃蛇简介 &#x1f603;贪吃蛇的实现 &#x1f40d;生成地图 &#x1f40d;生成蛇模块 ❀定义蛇的结构体 ❀初始化蛇的相关信息 ❀初始化食物的相关信息 &#x1f40d;光标定位和…

【zabbix6自定义监控带参数】

目录 一、环境准备二、选择监控的数据三、在zabbix_server主机测试四、在web界面上配置监控项五、在web界面上添加触发器 一、环境准备 注意&#xff1a;避免一些问题&#xff0c;可以把防火墙&#xff0c;selinux都关闭 安装zabbix-sever&#xff1a;https://blog.csdn.net/q…

等保测评练习卷25

等级保护初级测评师试题25 姓名&#xff1a; 成绩&#xff1a; 一、判断题&#xff08;10110分&#xff09; 1.安全区域边界对象主要根据系统中网络访问控制设备的部署情况来确定&#xff08;&#xff09;不是网络访问控制设备而…

zero - hackmyvm

简介 靶机名称&#xff1a;Zero 难度&#xff1a;简单 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmZero 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;Zero&#xff09;&#xff1a;未知 windows_IP&#xff1a;192.168.130.158 k…

Vulnhub靶场DC-9练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 发现SQL注入点2. Sqlmap跑数据3. 文件包含4. SSH爆破端口敲门服务5. 提权&#xff08;写入/etc/passwd&#xff09; 0x04 总结 0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-9.z…

数据化项目中如何优化数据分析报表的响应速度

引言&#xff1a;在数据化项目中&#xff0c;优化数据分析报表的响应速度是一个关键任务&#xff0c;它直接影响到用户的体验和决策效率。以下是一些有效的策略和方法来优化数据分析报表的响应速度&#xff1a; 一.从IAAS层优化&#xff1a; 硬件与网络资源优化&#xff1a;提…

无法读取配置节“dataConfiguration”

无法读取配置节“dataConfiguration”&#xff0c;因为它缺少节声明 问题 在web.config中加了<dataConfiguration defaultDatabase"DefaultDB" />&#xff0c;服务器运行报无法读取配置节“dataConfiguration” 分析检查配置文件&#xff1a; Web.config…

前端常用的【设计模式】和使用场景

设计原则 最重要的&#xff1a;开放封闭原则 对扩展开放对修改封闭 工厂模式 用一个工厂函数&#xff0c;来创建实例&#xff0c;隐藏 new 如 jQuery 的 $ 函数&#xff0c;React 的 createElement 函数 单例模式 全局唯一的实例(无法生成第二个) 如 Vuex 和 Redux 的 store…

基于设备上解码的 Yolo 检测

什么是NDVI&#xff1f; 该存储库 ( 修改自 device-decoding) 包含直接使用 DepthAI SDK (main_sdk.py) 或 DepthAI API (main_api.py) 在设备上解码运行 Yolo 目标检测的代码。目前&#xff0c;支持的版本有&#xff1a;YoloV3 & YoloV3-tiny,YoloV4 & YoloV4-tiny,Y…

滑动窗口大总结!!!妈妈以后再也不担心我不会做滑动窗口啦~

写在前面&#xff1a;全部题都源于力扣 讲解题目一&#xff1a;最小覆盖子串题目二&#xff1a;字符串排列题目三&#xff1a;找所有字母异位词题目四&#xff1a;无重复字符的最长子串题目五&#xff1a;滑动窗口的最大值 讲解 滑动窗口算法技巧主要用来解决子数组问题&#…

B 端产品设计:导航系统构建指南

两年前写的一篇关于导航菜单的文章帮助许多学生进入 B 端设计领域。然而&#xff0c;两年过去了&#xff0c;行业在不断发展&#xff0c;文章中的许多观点并不适用于当前的 B 端设计环境。如今的 B 端设计越来越受到重视&#xff0c;所以最近打算深入挖掘之前不太过时的文章内容…

strimzi operator 部署kafka集群(可外部访问)

Strimzi介绍 官方文档:https://strimzi.io/docs/operators/0.42.0/overview#kafka-components_str Strimzi介绍 Strimzi 是一个用于 Apache Kafka 在 Kubernetes 上部署和管理的开源项目。它提供了一组 Kubernetes 自定义资源定义(Custom Resource Definitions,CRDs)、控制…

充电宝有必要买贵的吗?充电宝可以带上高铁吗?充电宝选购方法

市面上的充电宝可以说是非常的多&#xff0c;但是能选到一款适合自己的充电宝基本是不容易的&#xff0c;然而&#xff0c;当我们准备选购充电宝时&#xff0c;常常会面临诸多疑问。其中&#xff0c;“充电宝有必要买贵的吗”就是一个备受关注的问题。价格似乎成为了我们在众多…

[Git][认识Git]详细讲解

目录 1.什么是仓库&#xff1f;2.认识工作区、暂存区、版本库3.认识 .git1.index2.HEAD && master3.objects4.总结 1.什么是仓库&#xff1f; 仓库&#xff1a;进⾏版本控制的⼀个⽂件⽬录 2.认识工作区、暂存区、版本库 工作区&#xff1a;在电脑上写代码或⽂件的⽬录…