public class Demo4
{
public static void main(String[] args){
/*
5.位运算符:
用于操作数值的二进制位
1>移动位运算符:
对数值的二进制位进行移动操作的
1)左移:
<<
6<<1:6左移1位
00000000 00000000 00000000 00000110
0000000 00000000 00000000 000001100 --> 12
6<<2:
00000000 00000000 00000000 00000110
000000 00000000 00000000 0000011000 -- 24
一个数左移几位就是该数的二进制数最高位去除几位末位就补几个0;
左移是在进行升位操作,每左移一位就是升了一位,就乘一次2,那么某个
数向左移动几位就是乘以几次2,简单说就是某个左移几位就是乘以2的
几次方;
8<<2 ---> 32
7<<3 ---> 56
2)右移:
>>(右移):
16>>1:16右移1位
00000000 00000000 00000000 00010000
000000000 00000000 00000000 0001000 --->8
16>>2:
00000000 00000000 00000000 00010000
0000000000 00000000 00000000 000100 ---> 4
一个数右移几位就是该数的二进制数末位去除几位,高位进行补位,高位
原来是几就补几(目的保证数值的正负不变);右移是在进行降位,每右移
一位就是降了一位,就除以一次2,那么某个数向右移动几位就是该数除以
2的几次方;
24>>3 ---> 3
56>>4 ---> 3
-56>>2 --> -56/2^2 = -14
// -56 = 32 + 16 + 8
// 10000000 00000000 00000000 00111000 二进制补码
// 10000000 00000000 00000000 00110111 反码第一步
// 11111111 11111111 11111111 11001000 反码
// 11111111 11111111 11111111 11110010 向右移两位
// 10000000 00000000 00000000 00001101 反码
// 10000000 00000000 00000000 00001110 补码
// 结果为-14
>>>(无符号右移):
一个数右移几位就是该数的二进制数末位去除几位,高位进行补位,低位去除
几位高位就补几0(目的保证数值的最终都是正负):
-56>>>2:-56无符号右移两位
10000000 00000000 00000000 00111000
11111111 11111111 11111111 11000111
0011111111 11111111 11111111 111110 --> 1073741810
2>逻辑位运算符:
就是使用& | ^的逻辑特性来操作数值的二进制位:
7&2:
0111
&0010
------
0010 ---> 2
7|2:
0111
|0010
------
0111 ---> 7
7^2:
0111
^0010
-----
0101 ---> 5
3>取反:~
某个数取反就是该数的相反数再-1
*/
System.out.println(6<<1);
System.out.println(24>>3);
System.out.println(56>>4);
System.out.println(-56>>2);
System.out.println(-56>>>2);//1073741810
System.out.println(7&2);
System.out.println(7|2);
System.out.println(7^2);
System.out.println(~6);//-7
System.out.println(~-7);//6
}
}