当前位置: 首页 > news >正文

算法竞赛的制胜法宝:被严重低估的位运算究竟有什么用?

大家好,我是干货哥。今天咱们来聊聊一个让很多人都忽略的神技——位运算。等等,你是不是已经准备关掉这篇文章了?你以为位运算只是计算机底层的鸡肋操作?你以为这些不过是编程语言里最基础、最无趣的东西?但真的是这样吗?很多人都这么认为,但真相往往超乎想象!

位运算究竟是什么?

大家都知道,位运算是直接对二进制位进行操作,对吧?但你知道它的威力有多大吗?想象一下,用几行代码就能让你的算法速度飙升,甚至让你在信息竞赛中脱颖而出。听起来不可思议?但事实就是如此!

1. 按位与(&)真的只是用来判断奇偶性吗?

你是不是以为按位与(&)就是用来判断一个数是奇数还是偶数?错!这只是它的冰山一角。按位与可以让你轻松完成一系列高效操作,比如快速提取特定位的值,检查某个位是否为1等等。

int a = 5;   // 0101
int b = 3;   // 0011
int c = a & b;  // 0001 => c = 1

看吧,用按位与你就能快速搞定二进制操作,这么简单的代码你还要写一大堆if-else吗?再比如,你要检查一个整数的某一位是不是1,直接来:

int x = 6;   // 0110
int isSet = x & (1 << 1);  // 检查第1位是否为1,结果为2(即为真)

你还在为如何操作特定位而发愁吗?按位与早就帮你搞定了!

2. 按位或(|)只是二进制版的加法?你错了!

很多人认为按位或(|)只是将两个数的二进制位相加,但你知道它还有更炫酷的操作吗?按位或可以轻松地将某些位设置为1,只要简单地位移加个|,你就可以轻松搞定。

int a = 5;   // 0101
int b = 3;   // 0011
int c = a | b;  // 0111 => c = 7

是不是觉得有点意思?再比如,你要把一个数的某一位设为1,直接来:

int x = 4;   // 0100
x = x | (1 << 2);  // 将第2位设置为1,结果为 1100 => x = 12

看看,是不是瞬间搞定?还在用复杂的逻辑运算?这个小操作足以秒杀一切!

3. 按位异或(^)还能做交换?简直逆天了!

异或运算(^)的妙用可不止翻转位值。你知道吗?它还可以用来交换两个数,而不需要多余的临时变量!听起来像是魔法?但这确实是数学的奇妙之处。

int a = 5;  // 0101
int b = 7;  // 0111
a = a ^ b;  // 0010 => a = 2
b = a ^ b;  // 0101 => b = 5
a = a ^ b;  // 0111 => a = 7

你是不是以为看错了?没错,三行代码就完成了两个数的交换,而不需要临时变量!是不是瞬间觉得自己之前的代码简直繁琐不堪?

4. 左移和右移:别告诉我你只知道它们用来乘除法!

说到左移(<<)和右移(>>),你是不是只想到乘法和除法?但如果我告诉你它们在处理大数据和位掩码操作时简直是神器,你会不会有点儿不敢相信?

int x = 4;   // 0100
int y = x << 1;  // 1000 => y = 8 (相当于 x * 2)

左移操作在优化乘法运算时,简直就是效率提升器!再比如,你想清除某些位,右移同样能轻松搞定。

int x = 20;  // 10100
int y = x >> 2;  // 00101 => y = 5 (相当于 x / 4)

一行代码搞定除法操作,何必用循环去慢慢算?

5. 位运算的真正奥义:你真的掌握了吗?

你以为这些就是位运算的全部?错!位运算的妙用远不止这些,它是你提升代码效率的秘密武器,是竞赛中的得分利器。比如,快速计数1的个数,你只需要:

int count = 0;
while (n) {n &= (n - 1);  // 清除最低位的1count++;
}

简单几行代码就搞定了复杂的计数逻辑,是不是比用for循环快得多?

位运算,真正的制胜法宝!

所以,你还在认为位运算只是基础操作吗?还在觉得它无聊又低效吗?恰恰相反,位运算不仅简单易用,还能大幅提升你的算法性能。在信息竞赛中,掌握这些技巧,你就离制胜更近一步!

那今天的分享就到这儿了。觉得有用?赶紧练起来吧!下次竞赛,你也许就是因为这些小技巧而独占鳌头!

相关文章:

算法竞赛的制胜法宝:被严重低估的位运算究竟有什么用?

大家好&#xff0c;我是干货哥。今天咱们来聊聊一个让很多人都忽略的神技——位运算。等等&#xff0c;你是不是已经准备关掉这篇文章了&#xff1f;你以为位运算只是计算机底层的鸡肋操作&#xff1f;你以为这些不过是编程语言里最基础、最无趣的东西&#xff1f;但真的是这样…...

Qt QTableWidget 去除序号列

ui->tableWidget->verticalHeader()->setHidden(true);//垂直序列号&#xff08;表左侧&#xff09;ui.tableWidget->horizontalHeader()->setHidden(true);//水平序列号&#xff08;表上方&#xff09;删除后效果图&#xff1a;...

【C++】5.类和对象(3)

文章目录 3.析构函数析构函数的特点&#xff1a; 4.拷贝构造函数拷贝构造的特点&#xff1a; 3.析构函数 析构函数与构造函数功能相反&#xff0c;析构函数不是完成对对象本身的销毁&#xff0c;比如局部对象是存在栈帧的&#xff0c;函数结束栈帧销毁&#xff0c;他就释放了&…...

CTF-RCE

eval执行 ?cmdsystemctl("ls"); ?cmdsystemctl("ls /"); ?cmdsystemctl("cat /flag_27523); 命令注入 输入ip试试发先可以执行 127.0.0.1 查看一下看看有社么 127.0.0.1 | ls 试着看看php文件 127.0.0.1 | cat 297581345892.php 貌似这个文件有…...

谷歌账号登录时,多次验证后变成“您的计算机或网络可能在发送自动查询内容”,原因分析和解决建议

最近有多个朋友联系GG账号服务&#xff0c;反馈说谷歌账号登录的时候&#xff0c;提示谷歌账号活动异常&#xff0c;需要输入手机号验证&#xff0c;但是自己的手机号无法验证&#xff0c;要不提示无法用于进行验证&#xff0c;要不提示用于验证的次数过多。 有一些朋友第一次遇…...

【SpringMVC】详细介绍SpringMVC的执行流程

目录 1. 概念 2.SpringMVC工作原理 3. springMVC的简单使用 1.在pom.xml中导入相关依赖 2.在web.xml中配置dispatcherServlet 3.创建springMVC.xml核心配置文件 4. SPringMVC分层后各个模块的作用 1. 概念 什么是MVC&#xff1f; MVC是下面三个组件的简写&#xff0c;模型…...

工地云SaaS系统,通过物联网与可视化等先进技术的综合应用,搭建的智慧工地管理云平台源码

通过物联网与可视化等先进技术的综合应用&#xff0c;搭建智慧工地管理云平台。以绿色、安全施工管理为主线&#xff0c;从人员、设备、环境、监控#度管理、施工管理、工程管理等多个维度对现场要素进行信息化&#xff0c;实现数据实时更新、人员精确管理、风险及时预警、管理便…...

使用自定义注解和AOP解决登录校验问题

1、如果每次都从Redis获取token&#xff0c;会有很多冗余代码 2、使用面向切面编程的思想 在不改变源代码或者很少改变源代码的情况下&#xff0c;增强类的某些方法。 在业务代码之前设置 切入点 创建切面类&#xff0c;也就是比如登录校验的某些公共方法 切面类从切入点切入流…...

【数据结构初阶】队列

hello&#xff01; 目录 一、概念与结构 二、队列的实现 Queue.h Queue.c test.c 一、概念与结构 1、概念&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出的特性。 入队列&#xff1a;进行插入操作…...

《决胜B端 产品经理升级之路》 知识点总结

什么是b端产品&#xff1f; b端产品是指面向企业或组织的经营管理问题&#xff0c;旨在解决企业规模、成本、效率、品质和风控等方面的产品。这些产品主要帮助企业提高运营效率、降低成本、改善品质和控制风险等。b端产品适用于各种行业和企业类型&#xff0c;可以为企业带来深…...

2024年6月 青少年python一级等级考试真题试卷

202406 青少年软件编程等级考试Python一级真题 试卷总分数&#xff1a;100分 第 1 题 在使用turtle绘制图形时&#xff0c;如果要控制小海龟移动到 x 坐标为 200&#xff0c;y 坐标为150 的位置&#xff0c;以下代码能够实现效果的是&#xff1f;&#xff08; &#xff09; …...

TCFormer:通过标记聚类Transformer实现视觉识别

摘要 Transformer在计算机视觉领域得到了广泛应用&#xff0c;并取得了显著成功。大多数最先进的方法将图像分割成规则网格&#xff0c;并用视觉标记表示每个网格区域。然而&#xff0c;固定的标记分布忽略了不同图像区域的语义含义&#xff0c;导致性能次优。为了解决这个问题…...

haproxy实现七层负载均衡详解(基本配置与算法)

目录 一、haproxy介绍 1.1 haproxy工作原理 1.2 相关配置类型 二、全局配置 2.1相关参数说明 2.2实验示例 实验环境&#xff1a; 2.2.1 设置多进程 2.2.2 设置日志显示 三、proxies代理配置 3.1 参数说明 3.2 default配置相关属性参数 3.2. 配置前端fronttend后端ba…...

海量日志数据收集监控平台应该怎么设计和实现

设计和实现一个海量日志数据收集和监控平台&#xff0c;需要考虑以下几个关键方面&#xff1a;数据采集、数据存储、实时处理、监控与告警、可视化分析、扩展性和高可用性。以下是一个详细的设计和实现方案&#xff1a; 1. 需求分析 日志来源&#xff1a;明确日志的来源&…...

Windows图形界面(GUI)-MFC-C/C++ - CSliderCtrl

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 CSliderCtrl 创建滑动条 设置滑动条属性 成员函数 消息处理 注意事项 示例代码 CSliderCtrl 创建滑动条 在对话框编辑器中&#xff0c;从工具箱中拖拽一个Slider Control到对话框…...

常见中间件漏洞复现之【WebLogic】!

Weblogic介绍 WebLogic是美国Oracle公司出品的⼀个application server&#xff0c;确切的说是⼀个基于JAVAEE架构的中间件&#xff0c;默认端⼝&#xff1a;7001 WebLogic是⽤于开发、集成、部署和管理⼤型分布式Web应⽤、⽹络应⽤和数据库应⽤的Java应⽤服务器。将Java的动态…...

Linux服务器中限制远程IP登录的深入指南

在当今的数字化时代&#xff0c;Linux服务器的安全性是企业和个人用户不可忽视的重要方面。远程登录&#xff0c;尤其是通过SSH&#xff08;Secure Shell&#xff09;协议&#xff0c;是服务器管理中最常见的操作之一。然而&#xff0c;不限制远程登录的IP地址可能会暴露服务器…...

卫星通信中的拥塞控制算法

结论:现有的Cubic和BBR2算法可直接用于卫星通信网络的拥塞控制中,专为卫星设置的拥塞控制算法目前没有集成到系统中,但各自的性能表现需要根据实测情况进行取舍。 TCP Hybla...

全网​​​​​​​​超详细haproxy七层代理

一&#xff1a;负载均衡 1、概念 负载均衡&#xff1a; Load Balance &#xff0c;简称 LB &#xff0c;是一种服务或基于硬件设备等实现的高可用反向代理技术&#xff0c; 负载均 衡将特定的业务(web 服务、网络流量等 ) 分担给指定的一个或多个后端特定的服务器或设 备&…...

Docker日志文件全局配置

这段配置是Docker容器的日志驱动配置&#xff0c;具体来说是json-file日志驱动的配置。这个配置的作用是定义容器日志文件的大小和数量限制。 {"log-driver": "json-file","log-opts": {"max-size": "500m","max-file…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...