前言
本文为本小白学习数据结构的笔记,将以算法题为导向,向大家更清晰的介绍数据结构相关知识(算法题都出自B站马士兵教育——左老师的课程,讲的很好,对于想入门刷题的人很有帮助)
为什么要使用为位运算
位运算直接对整数的二进制位进行操作,因为在计算机中数据都是以二进制存储的,因此它在许多场景下能够提供比传统算术和逻辑运算更高效、更简洁的解决方案。
常见的几种位运算
1.位与&
十进制转二进制 两个都为1则为1,否则为0
例:判断奇偶数:x&1=1(x为奇数 ) x&1=0(x为偶数)
2.位或|
十进制转二进制 两个都为0则为0,否则为1
3.异或^
十进制转二进制 两个数都相同为0,否则为1
(满足交换律,相同的数异或位0,任何数和0异或都等于这个数本身)
4.按位取反~
变为二进制后,0变1,1变0,高位不足取0
5.左移 x<<y
变为二进制后,x左移y位,补零。相当于乘二。
6.右移 x>>y
变为二进制后,x右移y位,x为非负数高位补零,为负数高位补1。
例:(x+y)>>1右移一位相当于除以二
下面列几个比较好玩的运算的例子:
- 实现a与b值的交换
//实现a与b值的交换a = a ^ b;b = a ^ b; // b=a^b^b=aa = a ^ b; // a=a^b^b
- 想查x第n位是否为1:x&(1<<n)
2.把x的第n位设置为1/0;
为1
为0