2、Java位运算符

一般来说,位操作符只能操作整数类型(默认为int类型变量 32位)的变量或值

一、位逻辑运算符

运算符 含义 单目/双目运算符 实例
& 双目运算符 4&5=4
| 双目运算符 4|5=5
^ 异或 双目运算符 4^5=1
~ 单目运算符 ~4=-5
 1 class  位逻辑运算符
 2 {
 3     public static void main(String[] args) 
 4     {
 5         System.out.println(5&4);
 6         System.out.println(5|4);
 7         System.out.println(5^4);
 8         System.out.println(~4);
 9     }
10 }

 

 二、位移运算符

运算符 含义
<< 将操作数的二进制码整体左移指定位数,左移后右边空出来的位以0填充
>> 将操作数的二进制码整体右移指定位数,右移后右边空出来的位以符号位填充。即如果第一个操作数是正数,则左边补0;如果第一个操作数为负数,则左边补1
>>> 无符号右移,他把第一个操作数二进制码右移指定位数,左边空出来的位总是以0补充

  

左移运算符

1 System.out.println(-8<<2);//输出为-32

-8的原码:1000_0000_0000_0000_0000_0000_0000_1000

-8的反码:1111_1111_1111_1111_1111_1111_1111_0111

-8的补码:1111_1111_1111_1111_1111_1111_1111_1000

左移两位:1111_1111_1111_1111_1111_1111_1110_0000

左移两位的反码:1111_1111_1111_1111_1111_1111_1101_1111

左移两位的原码:1000_0000_0000_0000_0000_0000_0010_0000   结果为-32

无符号右移运算符和有符号右移运算符

1 jshell> -5>>2
2 $1 ==> -2
3 
4 jshell> -5>>>2
5 $2 ==> 1073741822
6 
7 jshell>

-5的原码:1000_0000_0000_0000_0000_0000_0000_0101

-5的反码:1111_1111_1111_1111_1111_1111_1111_1010

-5的补码:1111_1111_1111_1111_1111_1111_1111_1011

-5>>2过程:

-5>>2: 1111_1111_1111_1111_1111_1111_1111_1110

-5>>2的反码:1111_1111_1111_1111_1111_1111_1111_1101

-5>>2的原码:1000_0000_0000_0000_0000_0000_0000_0010    结果位-2

-5>>>2过程:

-5>>>2:0011_1111_1111_1111_1111_1111_1111_1110  

jshell> int a=0b0011_1111_1111_1111_1111_1111_1111_1110
a ==> 1073741822

猜你喜欢

转载自www.cnblogs.com/weststar/p/12294558.html