CSP备考---位运算

前言

        本期我们将学习位运算,与本期类型的考点(二进制转换)反码、补码、原码。

1、位运算是什么

首先我们需要先了解位运算是什么。

我们知道,计算机中的数在内存中都是以二进制形式进行存储的 ,而位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中尽量使用位运算进行操作,这会大大提高程序的性能。

那么,涉及位运算的运算符如下表所示:

符号描述运算规则实例(以四位二进制数为例)
&两个位都为1时,结果才为1。0001&0001=1,0001&0000=0,0000&0000=0000
|两个位都为0时,结果才为0。0001∣0001=0001,0001∣0000=0001,0000∣0000=0000
^异或两个位相同为0,相异为1。0001∧0001=0000,0001∧0000=1,0000∧0000=0
~取反0变1,1变0。∼0=1,∼1=0
<<左移各二进位全部左移若干位,高位丢弃,低位补0。

0001<<k=0100,k=2,k kk是左移的位数,这里k = 2 k=2k=2

>>右移

各二进位全部右移若干位,对无符号数,高位补0,有符号数,右移补1 11。

0100>>k=0001,k=2,k kk是右移的位数,这里k = 2 k=2k=2

2、位运算的性质

2.1 运算符的优先级

优先级需要弄清楚,如果不太清楚可以加小括号确保是想要的运算顺序,这里只是相对优先级,即只是和一些常用的算术运算符做比较。

2.2 位运算符的运算律

3、位运算高级操作

如下表,请读者认真阅读理解,在阅读的过程中可以对示例进行运算。

当然,这里只是一些常用的,并不是全部,位运算的神奇远不止于此。

4、负数的位运算 

首先,我们要知道,在计算机中,运算是使用的二进制补码,而正数的补码是它本身,负数的补码则是符号位不变,其余按位取反,最后再+ 1 +1+1得到的, 例如:

15 1515,原码:00001111   00001111\space00001111 补码:00001111 0000111100001111

− 15 -15−15,原码:10001111   10001111\space10001111 补码:11110001 1111000111110001

那么对于负数的位运算而言,它们的操作都是建立在补码上的,得到的运算结果是补码,最后将补码结果转化成一个普通的十进制数结果。
但需要注意的是,对于有符号数的右移操作,不同的处理器架构可能有不同的规定。在某些架构中(如x86),如果对有符号数执行算术右移(arithmetic right shift),则高位空出来的位置会补上符号位;对于无符号数的右移操作,所有架构都遵循相同的规则:高位空出来的位置会补0。例如对于− 15 -15−15,其补码为11110001 , 11110001,11110001,右移一位( − 15 > > 1 ) (-15>>1)(−15>>1)得到的是11111000 1111100011111000,即− 8 -8−8,其他的同理。
在大多数现代处理器上,无论是有符号数还是无符号数,左移操作总是将空出来的低位补0。

这里我们介绍几个特殊的性质:

  • 快速判断是否为-1

        在链式前向星中,我们初始化h e a d headhead数组为− 1 -1−1,最后判断是否遍历完u uu的所有边时,即判断i ii是否为− 1 -1−1,我们直接用∼ i \sim i∼i即可。原因就在于− 1 -1−1的补码是11111111 1111111111111111,按位取反就变为00000000 0000000000000000,这实际上就是0 00。

  • 取最低位的1,lowbit函数

        也就是x & ( − x ) x\&(-x)x&(−x),这在树状数组中起着巨大作用,这里指路一篇树状数组讲解b l o g blogblog:点这里,我们来证明一下,这里取x = 15 x=15x=15,对于15 & ( − 15 ) 15\&(-15)15&(−15),我们知道,在补码上进行运算得到的是00000001 0000000100000001,需要注意二元运算的符号位我们需要进行运算。

位运算的运用

1、判断第i位是否为0

2、将第i位设置为1

3、统计有多少个1 

int count(int x){int cnt = 0;while(x){x = x & (x - 1);cnt ++;}return cnt;
}

对于任意的x xx,转换成二进制后,是形如这样的数字:a a . . . a a 10...00 aa...aa10...00aa...aa10...00,从右向左数有任意多个0 00,直到遇见第一个1 11,字母a aa用来占位,代表1 11左边的任意数字。x − 1 x-1x−1转换成二进制后,是形如这样的数字:a a . . . a a 01...11 aa...aa01...11aa...aa01...11,从右向左数,原来的任意多个0 00都变成1 11,原来的第一个1 11,变成0 00,字母a aa部分不变。对x xx 和 x − 1 x-1x−1 进行 按位与 计算,会得到:a a . . . a a 00...00 aa...aa00...00aa...aa00...00,从右向左数,原来的第一个1 11变成了0 00,字母a部分不变。所以 x & ( x − 1 ) x \& (x-1)x&(x−1)相当于消除了 x xx 从右向左数遇到的第一个1 11。那么,x xx转换成二进制后包含多少个1 11,count函数里的循环就会进行多少次,直到x xx所有的1 11都被“消除”。

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

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

相关文章

打造本地GPT专业领域知识库AnythingLLM+Ollama

如果你觉得openai的gpt没有隐私&#xff0c;或者需要离线使用gpt&#xff0c;还是打造专业领域知识&#xff0c;可以借用AnythingLLMOllama轻松实现本地GPT. AnythingLLMOllama 实现本地GPT步聚&#xff1a; 1 下载 AnythingLLM软件 AnythingLLM官网地址&#xff1a; Anythi…

功能卓越,未来可期!实在Agent智能体公测圆满收官

“被需要的智能才是实实在在的智能。”一直以来&#xff0c;实在智能始终坚持从行业本质出发思考如何围绕客户需求打造更智能、更普惠的智能体数字员工&#xff0c;切实关注用户真实的使用体验与感受。 自2020年7月起&#xff0c;实在智能率先推出第一代实在RPA数字员工&#…

SpringBoot设置默认文件大小

1、问题发现 有个需求&#xff0c;上传文件的时候&#xff0c;发现提示了这个错误&#xff0c;看了一下意思是说&#xff0c;文件超过了1M。 看我们文件的大小&#xff1a; 发现确实是&#xff0c;文件超出了1M&#xff0c;查了一下资料&#xff0c;tomcat默认上传文件大小为1M…

简单粗暴的翻译英文pdf

背景&#xff1a;看书的时候经常遇到英文pdf&#xff0c;没有合适的翻译软件可以快速翻译全书。这里提供一个解决方案。 Step 1 打开英文pdfCTRLA全选文字CTRLC复制打开记事本CTRLV复制保存为data.txt Step 2 写一个C脚本 // ToolPdf2Html.cpp : 此文件包含 "main&quo…

大型语言模型自我进化综述

24年4月来自北大的论文“A Survey on Self-Evolution of Large Language Models”。 大语言模型&#xff08;LLM&#xff09;在各个领域和智体应用中取得了显着的进步。 然而&#xff0c;目前从人类或外部模型监督中学习的LLM成本高昂&#xff0c;并且随着任务复杂性和多样性的…

C# WinForm —— 18 NumericUpDown 介绍

1. 简介 数字显示框&#xff0c;通过向上、向下按钮来 增加/减小 显示的数值 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 numUD 开头Hexadecimal数值 up-down 控件的值是否应以十六进制显示Increment每单击一下按钮&#xff0c;增加或减…

音源分离|Music Source Separation in the Waveform Domain

一、文章摘要 本文中&#xff0c;比较了两种时域结构。首先将最初为语音源分离而开发的卷积tasnet应用于音乐源分离任务。虽然ConvTasnet击败了许多现有的频域方法&#xff0c;但正如人类评估所显示的那样&#xff0c;它存在明显的artifacts。本文提出了一种新的时域模型Demucs…

鸿蒙内核源码分析 (协处理器篇) | CPU 的好帮手

本篇很重要&#xff0c;对CP15协处理所有16个寄存器一一介绍&#xff0c;可能是全网介绍CP15最全面的一篇&#xff0c;鸿蒙内核的汇编部分(尤其开机启动)中会使用&#xff0c;熟练掌握后看汇编代码将如虎添翼。 协处理器 协处理器 (co-processor) 顾名思义是协助主处理器完成…

韵搜坊(全栈)-- 前后端初始化

文章目录 前端初始化后端初始化 前端初始化 使用ant design of vue 组件库 官网快速上手&#xff1a;https://www.antdv.com/docs/vue/getting-started-cn 安装脚手架工具 进入cmd $ npm install -g vue/cli # OR $ yarn global add vue/cli创建一个项目 $ vue create ant…

社交媒体数据恢复:默往

如果你在默往社交软件中丢失了重要的数据&#xff0c;不要着急&#xff0c;以下是一些步骤可以帮助你进行数据恢复&#xff1a; 登录账号&#xff1a;首先&#xff0c;你需要登录默往社交软件账号&#xff0c;确保你已经登录了正确的账号&#xff0c;因为如果你登录了错误的账号…

弘君资本策略:股指预计保持震荡上扬格局 关注公用事业、电网设备等板块

弘君资本指出&#xff0c;周一A股商场探底上升、小幅震动收拾&#xff0c;早盘股指低开后震动回落&#xff0c;沪指盘中在3126点附近取得支撑&#xff0c;午后股指企稳上升&#xff0c;盘中电网设备、公用事业、电力以及工程建造等职业体现较好&#xff1b;半导体、互联网以及软…

PXE+Kickstart无人值守安装安装Centos7.9

文章目录 一、什么是PXE1、简介2、工作模式3、工作流程 二、什么是Kickstart1、简介2、触发方式 三、无人值守安装系统工作流程四、实验部署1、环境准备2、服务端&#xff1a;关闭防火墙和selinux3、添加一张仅主机的网卡4、配置仅主机的网卡4.1、修改网络连接名4.2、配IP地址4…

差异基因散点图绘制教程

差异基因散点图绘制教程 本期教程 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游分析等内容。凡事在社群同学&#xff0c;可免费获得自2021年11月份至今全部教程&#xff0c;教程配备事例数据和相…

最新版Ceph( Reef版本)块存储简单对接k8s(上集)

当前ceph 你的ceph集群上执行 1.创建名为k8s-rbd 的存储池 ceph osd pool create k8s-rbd 64 642.初始化 rbd pool init k8s-rbd3 创建k8s访问块设备的认证用户 ceph auth get-or-create client.kubernetes mon profile rbd osd profile rbd poolk8s-rbd部署 ceph-rbd-csi c…

快速学习SpringAi

Spring AI是AI工程师的一个应用框架&#xff0c;它提供了一个友好的API和开发AI应用的抽象&#xff0c;旨在简化AI应用的开发工序&#xff0c;例如开发一款基于ChatGPT的对话应用程序。通过使用Spring Ai使我们更简单直接使用chatgpt 1.创建项目 jdk17 引入依赖 2.依赖配置 …

同城组局同城活动找搭子小程序JAVA源码面芽组局的实现方案

功能概述 基于微信小程序开发的一款软件&#xff0c;支持用户动态发布、私信聊天关注、礼物充值打赏、发起活动组局、用户报名参与、支持商家入驻&#xff0c;对接广告功能等。 活动发布&#xff1a;用户可以在平台上发布各种类型的活动&#xff0c;如户外徒步、音乐会观赏、…

AI应用案例:会议纪要自动生成

以腾讯会议转录生成的会议记录为研究对象&#xff0c;借助大模型强大的语义理解和文本生成等能力&#xff0c;利用指令和文本向量搜索实现摘要总结、要点提取、行动项目提取、会议纪要生成等过程&#xff0c;完成会议纪要的自动总结和生成&#xff0c;降低人工记录和整理时间成…

React 第三十章 React 和 Vue 描述页面的区别

面试题&#xff1a;React 和 Vue 是如何描述 UI 界面的&#xff1f;有一些什么样的区别&#xff1f; 标准且浅显的回答&#xff1a; React 中使用的是 JSX&#xff0c;Vue 中使用的是模板来描述界面 前端领域经过长期的发展&#xff0c;目前有两种主流的描述 UI 的方案&#xf…

Q1季度电饭煲家电行业线上市场(京东天猫淘宝)销售数据排行榜

鲸参谋监测的2024年Q1季度线上电商平台&#xff08;天猫淘宝京东&#xff09;电饭煲家电销售数据已出炉&#xff01; 今年Q1季度&#xff0c;电饭煲销售成绩不如预期。根据鲸参谋数据显示&#xff0c;今年Q1季度在线上电商平台&#xff08;淘宝天猫京东&#xff09;电饭煲销量…

三种有效方法:快速将视频格式转换mp4格式

在当今数字化时代&#xff0c;视频文件的格式多种多样&#xff0c;而将视频转换为MP4格式是一种常见的需求。MP4格式具有广泛的兼容性&#xff0c;适用于多种设备和平台&#xff0c;因此经常被选择作为视频文件的输出格式。 无论是为了在移动设备上观看视频&#xff0c;还是为…