位运算的概述
&(按位与):如果两个相应的二进制位都为1,则结果为1,否则结果为0。
|(按位或):两个相应的二进制位中只要有一个为1,则结果为1,否则结果为0。
^(按位异或):若参加运算的两个二进制位值相同,则结果为0,否则结果为1。
~(取反):对一个二进制数按位取反,即将0变为1,将1变为0。
<<(左移):用来将一个数的各二进制位全部左移N位,右边补0。
>>(右移):用来将一个数的各二进制位全部右移N位,移到右边的低位舍弃,对于无符号的数,高位补0;对于有符号的数,如果原符号位(即最高位)为1,则高位补1,如果原符号位为0,则高位补0。
位运算的应用
判断奇偶数
如果把n以二进制的形式展示的话,判断奇偶数只需要判断最后一个二进制位是0还是1就可以了,如果是1则为奇数,否则为偶数。
int n = 5;
if ((n & 1) == 1) {
System.out.println("n是一个奇数");
}
交换两个数的值
由上述^运算的定义可知,x^x=0,xyz=xzy,n^0=n,则可据此在不使用辅助变量的前提下交换两个数的值。
int x = 5;
int y = 9;
x = x ^ y;
//y=(x^y)^y=x^(y^y)=x^0=x;
y = x ^ y;
//x=(x^y)^x=(x^x)^y=0^y=y;
x = x ^ y;
System.out.println("x=" + x + ";y=" + y);
//输出结果:x=9;y=5
找出没有重复的数
适用场景:给出一组整数,其中一个数只出现了一次,其他的数都出现了两次,让找出这个只出现了一次的数。
由上述运算的定义可知,xx=0,xyz=xzy,n0=n,则将所有的数一起做,出现了两次的数都会被消掉。
int[] arr = {
1, 2, 3,

本文介绍了位运算的基础知识,包括按位与、或、异或、取反、左移和右移操作。并详细讨论了位运算在判断奇偶数、交换数值、找出不重复的数、计算次方以及子集枚举等实际应用中的巧妙运用。
最低0.47元/天 解锁文章
737

被折叠的 条评论
为什么被折叠?



