🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈
本期内容讲解位运算有关的题目,我们一起来看看吧!首先来复习一下基础的位运算知识吧。
1. 位运算基础
【<<】左移
【>>】右移
【~】取反
【&】按位与 有0则为0
【|】按位或 有1则为1
【^】按位异或 相同为0不同为1(或者记忆为无进位相加)
如果有更好的方法,可以按照自己的方法记忆哦,不要混淆~如果需要进一步了解,可以看【Java SE】运算符期内容,再去复习,也会有不一样的收获哦~
2. 基础题目
2.1 预热题目
1> 给一个数,确定它的二进制表示中的第x位是0还是1
【(n >> x) & 1】
2> 将一个数n的二进制表示第x位修改为1
【n = n | (1 << x) 】
3> 将一个数n的二进制表示第x位修改成0
【n = n & (~(1 << x)) 】
4> 提取一个数n二进制中最右侧的1
【n & (-n)】
其实通过这个图,我们也可以发现,求一个数的补码,找到这个数最右侧的1,1的左边全部变为相反,右边不变。
5> 干掉一个数n二进制中最右侧的1
【n & (n-1)】
【注意事项】
需要注意运算符的优先级!!!
原则:能加括号的加括号
2.2 代码
public class Main {
public static void main(String[] args) {
int n = 7;
int x = 3;
//1.给一个数n确定它的二进制表示的第x位是0还是1
int result_1 = (n >> x) & 1;
System.out.println(result_1);
//2.将一个数n的二进制表示第x位修改成1
int result_2 = n | (1<<x);
System.out.println(result_2);
//3.将一个数n的二进制表示第x位修改成1
int result_3 = n & (~(1 << x));
System.out.println(result_3);
//4.提取一个数n二进制中最右侧的1
int result_4 = n & (-n);
System.out.println(result_4);
//5.干掉一个数n二进制中最右侧的1
int result_5 = n & (n-1);
System.out.println(result_5);
}
}
2.3 按位异或【^】运算律
1.num ^ 0 = num
2.num ^ num = num
3. a^ b ^ c = a^(b ^ c)
如何理解按位异或【^】可以记忆为无进位相加和运算律中的(3)?
下面来看这个例子
奇数个1异或为1,偶数个1异或为0
本期内容到这结束啦,可以刷刷有关位运算的题目~加深理解哟。