位运算概述

首先

位运算这个东西在考试中十分容易考,所以要多多看一看位运算的相关知识,多刷一刷题之类的。


位运算的概念

位运算就是二进制数据进行运算的运算符。

注意:通常我们用二进制补码来表示,补码的符号位也是要参与运算的。

通常的位运算分为:与、或、非、异或、左移、右移等。

非:not 符号:¬        与:and  符号:∧        或:or 符号:∨        异或:xor 符号:⊕

 左移:<<        右移:>>

非:按位取反,用符号 “ ¬ ” 表示,c++用 “ ~ ” 。。如:¬ 101 = 010 。

与:同一位都为 1 时结果才为 1(真),否则为 0 (假)。用符号“∧”表示,c++用 “ & ” 。如:101 ∧ 110 = 100 。

或:两个二进制补码的同一位都为 0 时结果才为 0 (真),否则为 1 (假)。用符号“∨”表示,c++用 “ | ” 。如:101 | 100 = 010 。

异或: 如果两个二进制补码不相同,则异或结果为 1 (真),如果两个二进制补码相同,异或结果为 0 (假)。用符号 “ ⊕ ” 表示,c++用 “ ^ ” 。如:1010 ⊕ 1111 = 0101 。常见用法:反转二进制,只需要将想要反转的位异或 1 就可以了。

左移:将原本的二进制补码进行往左偏移运动,空位补 0 。

如:

原数:1010 。

1010 << 1 变成: 1010_(“_”是缺位的意思)最后变成: 10100 。

现数:10100(多了一个 0 )。

右移:将原本的二进制补码进行往右偏移运动。空位补 0 ,超位的删除。

如:

原数:1011 。

1011 >> 1 变成: _101 ' 1 '(“_”是缺位的意思,引号引出来的是超位)最后变成: 0101 。

现数:0101(最后一个 1 被删除了,前面补了一个 0 )。


优先级

注意:同级的运算符不分高低,计算时按照从左到右运算。


位运算的运用

若二进制补码为 S ,那么对 S 有以下操作(反向从第 0 位开始):

① 判断第 i 位是否为 0:

S &( 1 << i )== 0,将 1 左移 i 位与 S 进行与运算后,看结果是否为 0 。

( S >> i )& 0x0000001 看结果是否为 0 。

② 将第 i 位设置为 1:

S |( 1 << i ),将 1 左移 i 位与S进行运算。

③ 将第 i 位设置为 0:

S & ~( 1 << i ),S与第 i 位为 0,其余位为 1 的数进行与运算。

如:S = 1010101,i = 5 实际上是第 6 位。

S &( 1 << i ):1010101 & 0100000 = 000000

④ 清零:n = 0 或 n & =0

⑤ 判断奇偶:a % 2 == 0 或 (a & 1)== 0

⑥ 取一个数的指定位:如:x = 1010 1110,y = 0000 1111,只需(x & y),结果:0000 1110

⑦ 判断 x 是不是 2的幂次:x & x - 1

⑧得到最后的 1 及后面的 0(2 的幂次) x & -x

位运算效率比较高,如果遇到有幂次或者 2 的倍数等题目,尽量使用位运算,不会的千万别使用 !

2^{n}:1 << n

n/2:n >> 1

n*2:n << 1


最后(不想看的可以不看)

这个博主真有趣,给他点赞,关注加收藏吧!

!!!

!!!

​​​​​​​!!!

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

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

相关文章

Hadoop 3.4.0 项目实战

1环境基于 上一篇搭建 高可用分布式集群 2 官方提供MapReduce程序 #评估圆周率 cd /data/hadoop/share/hadoop/mapreduce/ hadoop jar hadoop-mapreduce-examples-3.4.0.jar pi 2 6 3 实例项目分析1 #预分析的文件如&#xff0c;如单词统计 # #上传文件到hdfs hdfs …

高通QCS6490开发(四):FV01 AI开发板系统烧录

本期主要介绍如何在FV01开发板上烧录镜像 所用硬件有&#xff1a; FV01开发板和type C线 操作步骤如下&#xff1a; 首先连接电源线开机&#xff0c;然后通过Type C线连接FV01开发板和PC&#xff0c;接线如下&#xff1a; 1&#xff09;将设备通过如下命令进入到EDL紧急下载…

三.使用HashiCorp Vault工具管理数据库

三.ubuntu安装使用HashiCorp Vault工具管理数据库 HashiCorp Vault 是一个基于身份的秘密和加密管理系统。机密是您想要严格控制访问的任何内容,例如 API 加密密钥、密码和证书。Vault 提供由身份验证和授权方法门控的加密服务。使用 Vault 的 UI、CLI 或 HTTP API,可以安全…

Web3与物联网:构建智能连接的数字世界

引言 随着互联网的不断发展&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;作为一种新兴的信息技术&#xff0c;正在逐渐渗透到我们的生活和工作中。而随着Web3的兴起&#xff0c;物联网将迎来新的发展机遇。本文将探讨Web3与物联网的结合&#xff0c;如何…

废品回收 小程序+APP功能介绍

基于您提供的废品回收应用的开发需求&#xff0c;以下是基于Uniapp&#xff08;用户端和回收员端&#xff09;、Thinkphp5&#xff08;后台&#xff09;、MySQL&#xff08;数据库&#xff09;的综合解决方案的概述。 一、技术栈选择 前端&#xff1a;Uniapp&#xff08;跨平…

软考--试题六--中介者模式(Mediator)

中介者模式(Meditor) 意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互 结构 适用性 1、一组对象以定义良好但是复杂的方式进行通信&#xff0c;产生的相互依赖关…

C语言性能深度剖析:从底层优化到高级技巧及实战案例分析

C语言以其接近硬件的特性、卓越的性能和灵活性&#xff0c;在系统编程、嵌入式开发和高性能计算等领域中占据着举足轻重的地位。本文将深入探讨C语言性能优化的各个方面&#xff0c;包括底层原理、编译器优化、内存管理和高级编程技巧&#xff0c;并结合多个代码案例来具体分析…

6大部分,20 个机器学习算法全面汇总!!建议收藏!(下篇)

上篇地址&#xff1a;6大部分&#xff0c;20 个机器学习算法全面汇总&#xff01;&#xff01;建议收藏&#xff01;&#xff08;上篇&#xff09;-CSDN博客 上篇介绍了 接下来介绍新的内容 半监督学习算法 半监督学习算法结合了监督学习和无监督学习的元素&#xff0c;利用既…

告别手动截图!手把手教您在教程制作中,如何自动生成Windows操作步骤

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 操作演示 📒📝 记录器📝 操作步骤⚓️ 相关链接 ⚓️📖 介绍 📖 🚀 探索Windows的隐藏宝藏 —— 步骤记录器:你的操作,它来记录! 你是否曾经希望有一个助手,能够自动记录下你在电脑上的每一个操作步骤?无论是为…

基于 Spring Boot 博客系统开发(十)

基于 Spring Boot 博客系统开发&#xff08;十&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;九&#xff09;&#x1f…

未授权访问:Rsync 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用rsync下载任意文件 5、利用rsync反弹shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c…

华为OD机试【分奖金】(java)(100分)

1、题目描述 公司老板做了一笔大生意&#xff0c;想要给每位员工分配一些奖金&#xff0c;想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序&#xff0c;每个人随机抽取一个数字。按照工号的顺序往后排列&#xff0c;遇到第一个数字比自己数字大的&#xff0c;那么&…