位操作符
位操作符基础:
符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 全1为1 |
| | 或 | 有1为1 |
~ | 非 | 取反,0变1,1变0 |
^ | 异或 | 异1同0 |
>> | 右移 | 各二进位全部右移若干位,正数高位补0,负数高位补1 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>>> | 无符号右移 | 无论高位是0或1,高位全部补0 |
注:位操作符只能用于整型数据
位操作符的运用:
这里主要列举左移和右移位操作符的作用:
1.可以实现数的倍增和倍减.
左移n位,就是将当前的数乘以2^n, 右移n位,就是将当前的数除以2^n.
public class bitOperation {
public static void main(String[] args) {
int a=6,c;
int b=a>>1;
c=a<<1;
System.out.println("右移一位"+b);
System.out.println("左移一位"+c);
}
}
输出结果为
a的二进制表达式为0110;将a进行右移一位,末位0被舍弃,正数高位补0,则b=0011,0011转换为十进制为3;将a进行左移一位,末位补0,则c=1100,1100转换为十进制12。
2.可以实现两数的互换
public class bitOperation {
public static void main(String[] args) {
int n=3,m=4;
if(n !=m)
{
n ^=m; //n=n^m
m ^=n; //m=m^(n^m),由交换律,得m^m^n,一个数与自己的异或值为0,任何数与0异或值不变,所以此时m=n;
n ^=m; //n=n^m,而m=n,n=n^m^n。
}
System.out.println("m="+m);
System.out.println("n="+n);
}
}
输出结果为:
PS:计算机中数以二进制表示,这里补充说下原码、补码、反码。
正数的原码、补码、反码均相同; 负数的反码为符号位不变,其余全取反,补码为符号位不变,其余全取反,末位再加1.