后端常见问题解答-位运算实际场景讲解

位运算

在计算机存储的世界中,一切都是二进制的,位运算就是对二进制位进行操作的一种运算。位运算是计算机中的一种常见运算,可以用来提高性能和提升代码的可读性。

位运算有很多种,比如与、或、非、异或等,这些运算可以用来实现很多高效的算法。在这里,我们根据Bitmap实现密码强度检查器的实例,讲解位运算的实际应用场景。

代码讲解

查看源码

上面的代码中,我们使用Bitmap来表示密码中的字符,然后用位运算来判断是否符合要求。

我们先说清楚Bitmap的构建,我们用一个长度为128的数组来表示ASCII码表中的字符,然后用1 << 1, 1 << 2, 1 << 3, 1 << 4来表示大小写字母、数字、特殊字符,然后用位运算来判断是否符合要求。

那么我们先看一下UPPER_CASE、LOWER_CASE、DIGIT、SPECIAL_CHAR这四个常量:

从上面的图可以看出来,1 << 1 就是2, 对应的二进制表示就是"00000010"

| 或运算

ALL 这个变量UPPER_CASE | LOWER_CASE | DIGIT | SPECIAL_CHAR的或运算:

二进制的或运算是将两个数的二进制表示对应位进行或运算,只要有一个为1,结果就是1,否则就是0。

也就是00000010 | 000000100 | 0000001000 | 00000010000,也就是00000011110 所以ALL就是表示每个位上的状态都是1,也就是密码中包含了大小写字母、数字、特殊字符。

|= 或运算

hints |= currentBit 这个语句是将hints和currentBit进行或运算,然后将结果赋值给hints。 等同于:

hints = hints | currentBit;

就是相当于将hints的每一位和currentBit的每一位进行或运算,然后将结果赋值给hints。

& 与运算

代码中,我们用(currentBit & ALL) == 0来判断是否符合要求,这里用到了与运算。 二进制的与运算是将两个数的二进制表示对应位进行与运算,只有两个数的对应位都是1,结果才是1,否则就是0。

也就是00000010 & 0000001110,也就是00000010, 因为只有第二位是1,其他位都是0。 这个值就不会等于0,就表示当前的字符是符合要求的。

~ 非运算

~ 非运算是将一个数的二进制表示取反,也就是0变成1,1变成0。 也就是~00000010,也就是11111101,这个值就是-3。

配合与运算,可以用来取消hints的某一位, 比如当前是 UPPER_CASE | LOWER_CASE, 我们想取消LOWER_CASE

可以用hints & ~LOWER_CASE来取消LOWER_CASE
也就是00000010 & ~00000100,—> 00000010 & 11111011,—> 00000010
这样就取消了LOWER_CASE

比如:

hints = hints &= ~currentBit;

等同于:

hints = hints & ~currentBit;

^ 异或运算

异或运算是将两个数的二进制表示对应位进行异或运算,只有两个数的对应位不相同,结果才是1,否则就是0。

也就是00000010 ^ 0000001110,也就是000000110, 因为只有第二位是1,其他位都是0。 这个值就不会等于0,就表示当前的字符是符合要求的。

总结
在实际的开发中,我们可以用位运算来实现很多高效的算法,比如Bitmap、布隆过滤器等,这些算法都是基于位运算的,可以提高代码的性能和可读性。

作为后端开发工程师,我们需要了解位运算的基本原理和应用场景,这样才能更好地优化代码,提高系统的性能。

所有的后端面试常见的问题,我们每天都会在我们的编程群里面讨论和Code review, 欢迎大家加入我们的编程群,一起学习和进步。

实战项目交流群

入职啦官方公众号,关注更多面试题分享

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

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

相关文章

编程学到什么水平可以去接单呢?

关于编程要学到何种水平才可以去接单&#xff0c;这是一个需要认真思考的问题。 如果没有完整的项目经验&#xff0c;千万不要轻易地去承接外包项目。不要觉得仅仅因为自己能够编写一个计算器程序&#xff0c;就自以为有能力承接工程项目了。 要是没有拥有解决问题的清晰思路以…

springmvc 全局异常处理器配置的三种方式深入底层源码分析原理

文章目录 springmvc 全局异常处理器配置的三种方式&深入底层源码分析原理配置全局异常处理器的三种方式实现接口HandlerExceptionResolver并配置到WebMvcConfigurer注解式配置ExceptionHandlercontroller里方法上定义ExceptionHandler 深入源码分析进入DispatcherServlet执…

SpringBoot3 常用的第三方接口调用十种方式

环境&#xff1a;SpringBoot.3.3.0 简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范&#xff0c;以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式&#x…

经典的带环链表问题(链表补充)

环形链表1 运用快慢指针的方法&#xff0c;fast ,slow从头节点出发&#xff0c;快指针走两步&#xff0c;慢指针走一步&#xff0c;若有环&#xff0c;快指针先进环&#xff0c;后续如果慢指针和快指针相遇&#xff0c;则链表带环。转换成了追击问题。 struct ListNode {int v…

重温react-01

创建react项目 // 第一步 npm install create-react-app -g // 第二步 create-react-app my-app目录介绍 my-app/README.md# 项目第三方依赖包node_modules/package.json# 一般用来存放静态依赖public/index.htmlfavicon.ico# 存放项目源代码&#xff0c;注意只有放在scr目录…

分布式一致性和CAP理论、Paxos算法、Raft算法、Zab协议

1.分布式一致性的重要性 在分布式系统中&#xff0c;一致性是一个至关重要的概念。分布式系统由多个节点组成&#xff0c;这些节点通过网络进行通信和协作。然而&#xff0c;由于网络延迟、节点故障等原因&#xff0c;分布式系统中的数据一致性往往面临着挑战。 一致性指的是在…

升级Oracle SQLcl

当前版本为19.1&#xff0c;这是安装数据库19.3时自带的&#xff1a; [oracleoracle-19c-vagrant ~]$ sql -V SQLcl: Release 19.1.0.0 Production[oracleoracle-19c-vagrant ~]$ which sql /opt/oracle/product/19c/dbhome_1/bin/sql从官网 可知最新版本为&#xff1a;24.1 。…

快速提升沟通能力:客服必备的话术技巧

在现在的这个互联网时代&#xff0c;各行业竞争日益激烈&#xff0c;而客服作为连接商家和消费者的桥梁&#xff0c;无疑是一个重要的岗位。可以说客服是一个极具挑战性的岗位&#xff0c;客服每天需要面对来自全国各地的客户&#xff0c;同时还要对不同地区、不同性格、不同需…

SQLServer 借助Navcate做定时备份的脚本

首先创建SQLServer链接&#xff0c;然后在Query标签种创建一个查询 查询内容如下 use ChengYuMES declare ls_time varchar(1000) declare ls_dbname varchar(1000) set ls_time convert(varchar, getdate(), 112) _ replace(convert(varchar, getdate(), 108), :, )-- 需…

LeetCode20.有效的括号

题目描述 分析 我们刚上来的思路可能是&#xff1a;找出这三种括号的个数 如果都是偶数 说明匹配 但是这里还有一个顺序问题 比如 " )( "这样是不匹配的&#xff01; 所以这种思路不可取&#xff01; 我们想 如果遇到左括号&#xff0c;把他读到一个顺序表中&#…

Redis应用:基于Redis实现排行榜、点赞、关注功能

文章目录 1. 环境准备2. 实现排行榜功能2.1 添加用户分数2.2 获取排行榜2.3 获取用户排名2.4 更新用户分数示例代码3. 实现点赞功能3.1 添加点赞3.2 获取点赞数3.3 检查用户是否点赞3.4 取消点赞示例代码4. 实现关注功能4.1 添加关注4.2 获取粉丝列表4.3 获取关注列表4.4 取消关…

【Pycharm】设置双击打开文件

概要 习惯真可怕。很多小伙伴用习惯了VsCode开发&#xff0c;或者其他一些开发工具&#xff0c;然后某些开发工具是单击目录文件就能打开预览的&#xff0c;而换到pycharm后&#xff0c;发现目录是双击才能打开预览&#xff0c;那么这个用起来就特别不习惯。 解决办法 只需一…

高清视频+AI算法,EasyCVR视频智能监控方案打造无死角吸烟行为检测

一、背景与意义 1、吸烟危害&#xff1a;吸烟不仅有害健康&#xff0c;而且在特定场所带来的安全隐患极大。据统计&#xff0c;全年火灾事故中有五分之一系抽烟引起&#xff0c;引发的人员伤亡和财产损失巨大。 2、政策与法规&#xff1a;为了保护公共安全&#xff0c;消除消…

C语言中的弱函数是什么?

在C语言编程中&#xff0c;“弱函数”&#xff08;weak function&#xff09;是一种特殊的函数声明方式&#xff0c;它允许在链接时可以被另一个具有相同名称的强函数&#xff08;strong function&#xff09;所覆盖。弱函数通常用于库函数或嵌入式系统中的启动代码&#xff0c…

解决方案︱视频孪生智慧高速解决方案

系统概述 在交通强国战略的指导下&#xff0c;我国政府高度重视以数字化为核心的智慧高速公路建设与发展。2023年9月&#xff0c;交通运输部印发了《交通运输部关于推进公路数字化转型加快智慧公路建设发展的意见》&#xff0c;强调到2035年&#xff0c;全面实现公路数字化转型…

java多线程概念

在Java多线程编程中有几个重要的概念&#xff0c;这些概念对于理解和编写正确的多线程应用程序至关重要&#xff1a; 1.线程&#xff08;Thread&#xff09;: 线程是操作系统能够进行运算调度的最小单位&#xff0c;Java通过线程实现并发执行。 2.进程&#xff08;Process&…

华为OD刷题C卷 - 每日刷题31(园区参观路径,围棋的气)

1、&#xff08;园区参观路径&#xff09;&#xff1a; 这段代码是解决“园区参观路径”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法和getResult方法&#xff0c;以及一个未使用的dfs方法&#xff0c;用于计算从园区起点到终点的不同参观路径数量。 main方法…

助力OTT大屏营销,酷开科技引领产业变革与创新

随着大屏电视产品的迭代&#xff0c;越来越多家庭以增换购等多种形式获得超高清、超大屏的智能电视&#xff0c;大屏的人均拥有量和渗透率进一步增加。在这种情况下&#xff0c;通过OTT应用为载体&#xff0c;将大量内容持续输送到大屏终端&#xff0c;从而形成了电视硬件普及与…

工控机与普通电脑的区别对于工业自动化应用至关重要

商用计算机和工业计算机之间的相似之处可能多于差异之处。工业电脑利用了消费技术领域的许多进步&#xff0c;但增加了工业应用所必需的软件、编程、确定性和连接性。 专业人士表示&#xff1a;“从增加内存到摩尔定律所描述的处理能力的指数级增长&#xff0c;工业控制必将受…

【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南

目录 &#x1f497;1. 准备工作和环境配置&#x1f495; &#x1f496;安装OpenCV&#x1f495; &#x1f496;安装Dlib&#x1f495; 下载并编译TensorFlow C API&#x1f495; &#x1f497;2. 下载和配置预训练模型&#x1f495; &#x1f496;2.1 下载预训练的ResNet…