1.位运算符
运算符 | 运算 |
---|---|
<< | 左移 |
>> | 右移 |
>>> | 无符号右移 |
& | 与运算 |
| | 或运算 |
^ | 异或运算 |
2.位运算符细节
运算符 | 细节 |
---|---|
<< | 空位补0,被移除的高位丢弃 |
>> | 被移除的二进制最高位是0,右移后,空缺位补0;最高位是1,最高位补1 |
>>> | 被移除最高位无论是0或者是1,空缺位都用0补 |
& | 任何二进制位和0进行&运算,结果是0;和1进行运算结果是1 |
| | 任何二进制位和0进行|运算,结果是原值;和1进行|运算结果是1 |
^ | 任何相同二进制位进行^ 运算,结果是0;不相同二进制位^运算结果是1 |
代码块:
package demo;
public class Demo1 {
public static void main(String[] args) {
//位运算符
//1.左移<<(相当于6*2的2次方)
System.out.println(6<<2);
/*
* 6的原码:
* 0000-0000 0000-0000 0000-0000 0000-0110
* 左移两位:
* 0000-0000 0000-0000 0000-0000 0001-1000
*
* */
//2.右移>>(相当于8/2的2次方)
System.out.println(8>>2);
/*
* 8的原码:
* 0000-0000 0000-0000 0000-0000 0000-1000
* 右移两位:
* 0000-0000 0000-0000 0000-0000 0000-0010
*
* */
//3.无符号右移>>>
System.out.println(-9>>>2);
/*
* -9的原码
* 1000-0000 0000-0000 0000-0000 0000-1001
* -9的反码
* 1111-1111 1111-1111 1111-1111 1111-0110
* -9的补码
* 1111-1111 1111-1111 1111-1111 1111-0111
* 无符号右移2位
* 0011-1111 1111-1111 1111-1111 1111-1101
* */
//4.位&运算
System.out.println(4&2);
/*
* 4的原码:
* 0000-0000 0000-0000 0000-0000 0000-0100
* 2的原码:
* 0000-0000 0000-0000 0000-0000 0000-0010
* 进行位&运算:全1才1,有0则0
* 0000-0000 0000-0000 0000-0000 0000-0000
* */
//5.位|运算
System.out.println(4|2);
/*
* 4的原码:
* 0000-0000 0000-0000 0000-0000 0000-0100
* 2的原码:
* 0000-0000 0000-0000 0000-0000 0000-0010
* 进行位|运算:全0才0,有1则1
* 0000-0000 0000-0000 0000-0000 0000-0110
* */
//位^运算
System.out.println(4^2);
/*
* 4的原码:
* 0000-0000 0000-0000 0000-0000 0000-0100
* 2的原码:
* 0000-0000 0000-0000 0000-0000 0000-0010
* 进行位^运算:相同位0,不同为1
* 0000-0000 0000-0000 0000-0000 0000-0110
* */
System.out.println(4^4);
}
}