算法小练之 位运算基础

前言

今天正式走入,位运算这个章节,关于这一部分我会先介绍几个重要的知识点,然后再根据几个力扣上的题来讲解。

了解6种位操作

总所周知,变量在计算机中都是二进制存储的,比如一个变量int a = 1;

它的存储方式就是:

>>(右移):

用法:a>>x

含义:将a的二进制位数整体右移x位

举例:

<<(左移):

用法:x<<a

含义:将a的二进制位数整体左移x位

举例:

 ~(按位取反):

用法:~a

含义:将a的所有二进制位进行取反,1改为0,0改为1

举例:

&(按位与):

用法:a&b

含义:有0为0,无0为1

举例:

二级结论:

x为任何数

x & 1 = x 

|(按位或): 

用法:a|b

含义:有1为1,无1为0

 举例:

二级结论:

x为任何数

x | 0 = x 

^(按位异或)  : 

用法:a^b

含义:相同为0,相异为1

举例:

二级结论:

x为任何数

x ^ 0 = x

x ^ x = 0

a ^ b ^ c = a ^ c ^ b = a ^ (b ^ c) 

现在可以学习一些基本的位操作了 

 1.确定数n二进制第x位是0还是1

注意:x为用右往左从0开始计数的下标

结论:

(n>>x) & 1

原理很简单,自己随便模拟一下即可。

2.将数n二进制的第x位改成1

结论:

n = n | (1 << x)

3.将数n二进制的第x位改成0

结论:

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

4.提取一个数n最右侧的1

结论: 

n & (-n)

5.干掉一个数n最右侧的1 

结论: 

n & (n - 1)

题目实战:

位1的个数:

题目很简单,就是给一个数n,求它的二进制中有多少个1。

思路:

 借助结论1:确定数n二进制第x位是0还是1,从右往左遍历所有二进制位,发现1就计数器++:

class Solution {
public:int hammingWeight(int n) {int ret = 0;for(int i = 0;i<32;i++)//从右往左遍历整个二进制{if(((n>>i)&1)==1)//检查第i位是否为 1{ret++;}}return ret;}
};

比特位计数:

本题和上一题相差不大,只需加一层for遍历0 -- n即可:

class Solution {
public:vector<int> countBits(int n) {vector<int> ret;for(int i = 0;i<=n;i++){int count = 0;for(int j = 0;j<32;j++){if(((i>>j)&1) == 1){count++;}}ret.push_back(count);}return ret;}
};

汉明距离:

思路: 

做了上面两道题后,再看这道题就会发现很简单,我们只需先将x^y,因为^操作相同为0,相异为1,我们只需统计x^y后二进制位中有多少个1即可:

class Solution {
public:int hammingDistance(int x, int y) {int ret = 0;int n = x ^ y;for(int i = 0; i<32 ;i++){if(((n>>i)&1) == 1){ret++;}}return ret;}
};

 这几道题较为基础,是深入学习的前提,希望大家好好掌握。

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

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

相关文章

nvidia driver和cuda版本较低,ubuntu系统更新nvidia驱动的方法(对于小白最快最最保险的方法)

问题描述&#xff1a; 系统&#xff1a;ubuntu22.04LTS 这两天安装另一个低版本的pytorch环境&#xff0c;提示我的cuda版本很旧&#xff0c;然后运行程序时候甚至直接报错&#xff0c;如下所示&#xff1a; .local/lib/python3.10/site-packages/torch/cuda/__init__.py&quo…

高通开发系列 - 使用QFIL工具单刷某个镜像文件

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 背景过程记录背景 有时候设备中刷的是user版本,无法使用fastboot刷单个镜像,这个时候该怎么办呢? 要解决在user…

Linux 一键部署Mysql 8.4.1 LTS

mysql 前言 MySQL 是一个基于 SQL(Structured Query Language)的数据库系统,SQL 是一种用于访问和管理数据库的标准语言。MySQL 以其高性能、稳定性和易用性而闻名,它被广泛应用于各种场景,包括: Web 应用程序:许多动态网站和内容管理系统(如 WordPress)使用 MySQL 存…

Python从0到100(三十五):beautifulsoup的学习

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

【网络安全科普】网络安全指南请查收

随着社会信息化深入发展&#xff0c;互联网对人类文明进步奖发挥更大的促进作用。但与此同时&#xff0c;互联网领域的问题也日益凸显。网络犯罪、网络监听、网络攻击等是又发生&#xff0c;网络安全与每个人都息息相关&#xff0c;下面&#xff0c;一起来了解网络安全知识吧。…

上海市计算机学会竞赛平台2023年1月月赛丙组新年灯会

题目描述 新春佳节之际&#xff0c;路上挂起了一排喜气洋洋的大红灯笼&#xff0c;从左至右编号分别为1,2,...,&#x1d45b;1,2,...,n。但小爱发现&#xff0c;目前有&#x1d45d;p个灯笼不亮了&#xff0c;很是影响美观。 请你帮助小爱计算&#xff0c;最少修复多少个灯笼…

锐捷统一上网行为管理与审计系统static_convert接口远程命令执行漏洞复现 [附POC]

文章目录 锐捷统一上网行为管理与审计系统static_convert接口远程命令执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 锐捷统一上网行为管理与审计系统static_convert接口远程命令执行漏洞复现 [附POC] 0x…

如何快速将Excel定义的表结构转换为MySQL的建表语句

目录 引言 方法一&#xff1a;使用Python编程 步骤一&#xff1a;安装必要的库 步骤二&#xff1a;读取Excel文件 步骤三&#xff1a;编写函数生成建表语句 注意事项 方法二&#xff1a;使用Excel VBA 步骤一&#xff1a;启用VBA编辑器 步骤二&#xff1a;编写VBA代码…

共筑智能未来 | 思腾合力闪耀2024世界人工智能大会(WAIC 2024)

在刚刚结束的2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC 2024&#xff09;上&#xff0c;思腾合力作为行业领先的人工智能基础架构解决方案提供商&#xff0c;凭借卓越的产品和解决方案&#xff0c;成为展会上的亮点之一。此次盛会不仅展示了全球人工智…

基于现有Docker镜像构建新的Docker镜像

1.拉取ubuntu 22.04的系统镜像 docker pull ubuntu:22.04 拉取成功后在DockerDesktop中可发现该镜像 2.启动刚才接取的ubuntu镜像 docker run --name Ubuntu22.04 -it -d -p 22:22 -p 80:80 -p 443:443 340d9b015b194dc6e2a13938944e0d016e57b9679963fdeb9ce021daac430221 启…

使用 Vue.js 和 Element Plus 实现自动完成搜索功能

使用 Vue.js 和 Element Plus 实现自动完成搜索功能 一、前言1.环境准备2.组件配置3.后端数据请求4.样式5.总结 一、前言 在前端开发中&#xff0c;实现自动完成&#xff08;autocomplete&#xff09;功能可以极大地提升用户体验&#xff0c;特别是在需要用户输入和选择内容的…

Nignx配置

Nginx配置之nginx.conf文件解析及配置 1、nginx.conf文件解析 user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on; }http {### Basic Settings###开启文件的高效传输…

中国股市的价值投资

&#xff08;1&#xff09;大盘之外 上周五传的最热的就是央行到二级市场抛国债&#xff0c;以便让长期国债收益率保住。 按理说&#xff0c;保住房子资产就能保住汇率。 如果保不住房子资产价格&#xff0c;那么只能强单保汇率了。有感央行下场调节国债&#xff1a;存款利率-国…

邦芒攻略:三大技能助推职场成功

即将毕业的大学生们可能都在盘算职业生涯。工作中需要的专业知识当然要掌握&#xff0c;不过想脱颖而出成就长期稳定的事业&#xff0c;还要具备一些重要素质。传统教科书里并没提及&#xff0c;但卓越员工跟好员工经常有三点区别&#xff1a; 1、呈现真实的自己 记住表现出真…

SAP_MMABAP模块_MM60物料清单通过增强新增物料描述

业务背景&#xff1a; 用户需要在系统标准的物料主数据查询报表MM60中&#xff0c;添加物料组描述&#xff0c;一直以来&#xff0c;我都觉得标准的MM60显示的内容字段不够多&#xff0c;不太好用。 以往都是给用户新开发一个物料主数据查询报表来解决的&#xff0c;但是这次刚…

SpringSecurity 三更草堂学习笔记

0.简介 Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Spring…

GAMMA2stamps(全分辨率)

#滤波处理 mk_adf_2d rslc_tab itab rmli/MLI_ave diff0 7 0.4 64 4#################################### 生成经纬度文件 ############################## 建立经纬度文件 (1)生成pointlist mkgrid plist 5800 2000 1 1 1 1(2)将栅格转为点格式 data2pt cop30.rdc.hgt 2…

【爬虫】Python实现,模拟天眼查登录验证获取token

模拟天眼查登录验证获取token 项目介绍逻辑思路效果演示部分代码展示源代码获取 项目介绍 注&#xff1a;本程序测试时期&#xff1a;2024.7.9&#xff0c;稳定可用 天眼查登录接口升级更新之后&#xff0c;后台接口login接口登录运用了4代极验gt&#xff0c;js逆向部分相当复…

基于单片机的饲料搅拌机控制系统设计

摘要 &#xff1a; 文章主要从软件和硬件两个部分对基于单片机的饲料搅拌机控制系统进行研究设计 。 硬件部分主要由传感器模块 、 信号采集模块、 键盘接入模块 、 LED 显示模块 、 继电器模块以及看门狗模块组成 。 软件部分在 KeilC51 软件基础上重点对控制系统主程序 、…

英语零基础怎么学?40分起步逆袭140,我是这样教的

高中英语零基础考试分数&#xff0c;一般是三四十分。高中英语大部分的题目都是选择题&#xff0c;考三四十分&#xff0c;实际上基本上就是猜答案蒙对的分数。 高中英语并不难&#xff0c;在逻辑思维上&#xff0c;它是高中所有科目中最简单的科目。我个人在进入高中以后&…