位运算基础知识详解
创作时间:
作者:
@小白创作中心
位运算基础知识详解
引用
CSDN
1.
https://blog.csdn.net/2301_80007603/article/details/138288634
位运算是计算机科学中的基础概念,它直接操作二进制数,能够实现许多高效的算法和数据结构。本文将详细介绍位运算的基本操作、规律及其在实际编程中的应用,帮助读者深入理解这一重要技术。
一、定义
众所周知,计算机中数都是以二进制的形式存储的,位运算是指一种对二进制数进行操作的运算。在运算中除了左右移动运算每一位独立,各自得到结果。
注意:
- 位运算在竞赛中常常考察异或的性质、状态压缩、与位运算相关的数据结构(如树状数组、01Tire、01线性表)以及构造题。
- 位运算需要注意有符号整数的运算,因为它们含有符号位,会造成影响。
二、主要操作
按位与(AND,&)
用于两个操作数的对应位数进行逻辑与操作,二者都为1时结果为1,否则为0(类似电路中的与门)。
进行与运算后结果不会变大。按位或(OR,|)
二者有1就为1(类似或门)。
结果不会变小。按位异或(XOR,^)
两位不同时结果为1。
结果大小不一定。
按位异或满足以下运算规律:
- 交换律:a^b=b^a
- 结合律:a^(b^c)=(a^b)^c
- 自反律:a^a=0
- 零元素:a^0=a
- 逆运算:a^b=c => a=c^b(由自反律可得)
按位取反(~)
1变0,0变1,所以常用于无符号整型,否则符号位会造成影响。按位左移(<<)
将一个数的二进制向左移动指定的位数,移动后低位补0(若是有符号整型,注意不要移动到符号位上)。
左移操作相当于对原数乘以2的移动数的次方。按位右移(>>)
向右移动指定位数,高位补0,相当于原数除以2的移动数的次方,取整数。
好玩的是面对有符号整型时,右移会导致高位补1。
#include"bits/stdc++.h"
using namespace std;
int main()
{
cout<<bitset<32>(1<<31)<<'\n';//32位是一个整型的位数
cout<<bitset<32>((1<<31)>>31)<<'\n';
return 0;
}
三、应用
判断奇数偶数(x&1)
我们通常会用%来判断奇数偶数,但也可以用与1判断。
二进制中,若末尾是1则为奇数,所以与时只用看最后一位。
1&1->1 0&1->0
所以1为奇数 0为偶数获取二进制中某一位
x>>i&1 ,其中i表示某一位修改二进制位中的某一位为1
x|(1<<i) 若是修改为0,则使用与运算判断一个数是否为二的幂次方
x&(x-1) 如果是2的幂次方,则二进制中只有一个1,x-1就有很多个连续的1,并且和x的1没交集,两者运算一定为1。获取二进制中最低位的1
lowbit(x)=x&-x (常用于树状数组)
热门推荐
房贷利率下调月供涨,如何计算利率调整后的月供?
一套非常完整的机房装修方案
表见代理合同:明确代理权范围与职责的关键文件
古代神话中的“白虎”,究竟是何方神圣?老祖宗的告诫有何深意?
南宁去峨眉山怎么坐车?最快方式及自驾全攻略
银行存款利率调整与企业融资成本
如何理解利率变动对股价的影响机制?这种影响在不同市场环境下有何差异?
家中藏东西的最佳地点:“家居隐秘收纳宝地揭秘”
西冷牛排跟菲力牛排的口感区别是什么?
近年国际重大网络安全事件深度剖析:安全之路任重道远
陕南羌族传统民居建筑特色
打喷嚏是什么原因引起的怎么办
百菌清、多菌灵、甲基硫菌灵怎么用?有啥不同?一下说清!
收放自如——新型麻醉药物让无痛气管镜麻醉更从容
河南离婚一个月抚养费多少
小孩抚养费如何计算?一文详解计算方法与执行要点
醍醐寺:京都最古老的木制建筑群
国家级非遗:陆丰皮影戏的独特魅力
自信的光芒:通过挑战与成功培养孩子的自信心
外骨骼机器人:医疗康养新态势
揭秘外骨骼机器人、可穿戴机器人、外骨骼防护服
寻甸法院2024年工作回顾:坚持促公正提效率 推进审判工作现代化
挑染艺术:操作指南、技巧解析与独特风格演绎
轻断食晚上饿得睡不着怎么办?5个实用解决方案
柴胡加龙骨牡蛎汤的功效与作用
TikTok和抖音都属于中国吗?TikTok和抖音所属国家解析!
探索成语故事的魅力:10个你不知道的经典成语背后故事
如何让孩子一键切换“开学模式”?专家支招
用法:如何正确引用行业标准?
充电宝电量耗尽时,如何快速充电?这种充电方法的效率如何?