06. Java 位运算符

Java位运算符(bitwise operators),应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)。

运算符作用在所有的位上,并且按位运算。假设a = 5,b = 12;它们的二进制格式表示将如下:

A = 0101
B = 1100
-----------------
A&B = 0100
A | B = 1101
A ^ B = 1001
~A= 1010
操作符 描述 例子
如果相对应位都是1,则结果为1,否则为0 a & b = 4 即100
| 如果相对应位都是 0,则结果为 0,否则为 1 a | b = 13 即1101
^ 如果相对应位值相同,则结果为0,否则为1 a ^ b = 9 即1001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 ~a = -6 即1010
<<  按位左移运算符。左操作数按位左移右操作数指定的位数。 a << 2 = 20 即10100
>>  按位右移运算符。左操作数按位右移右操作数指定的位数。 a >> 2 = 1 即1
>>>  按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 a >>> 2 = 1 即1

位移说明

A << 2 表示A 向左边移动2位
A = 0101
计算机的前面其实还有很多0

所以 表示如下
位移前:A  = 0000 0101
位移后:A  = 0001 0100

当A >> 2 向右边移动的时候,后面没有空间了。所以砍掉
位移前:A  = 0000 0101
位移后:A  = 0000 0001

Java测试代码

int a = 5;
int b = 12;
System.out.println("a 的二进制:" + Integer.toBinaryString(a));		
System.out.println("b 的二进制:" + Integer.toBinaryString(b));	
 
int c = 0;
c = a & b;       
System.out.println("a & b = " + c +" 即"+Integer.toBinaryString(c));
 
c = a | b;       
System.out.println("a | b = " + c +" 即"+Integer.toBinaryString(c));
 
c = a ^ b;       
System.out.println("a ^ b = " + c +" 即"+Integer.toBinaryString(c));
 
c = ~a;          
System.out.println("~a = " + c +" 即"+Integer.toBinaryString(c));
 
c = a << 2;     
System.out.println("a << 2 = " + c +" 即"+Integer.toBinaryString(c));
 
c = a >> 2;     
System.out.println("a >> 2  = " + c+" 即"+Integer.toBinaryString(c) );
 
c = a >>> 2;    
System.out.println("a >>> 2 = " + c+" 即"+Integer.toBinaryString(c) );

输出

a 的二进制:101
b 的二进制:1100
a & b = 4100
a | b = 131101
a ^ b = 91001
~a = -611111111111111111111111111111010
a << 2 = 2010100
a >> 2  = 11
a >>> 2 = 11

复合位赋值运算符

运算符 含义 实例 结果
&= 按位与赋值 a &= b 等价于 a=a & b
|= 按位或赋值 a |= b 等价于 a=a | b
^= 按位异或赋值 a ^= b 等价于 a=a ^ b
-= 按位取反赋值 a ~= b 等价于 a=a ~ b
«= 按位左移赋值 a «= b 等价于 a=a « b
»= 按位右移赋值 a »= b 等价于 a=a » b


This entry was posted in JAVA and tagged . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/java-shit-operation/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.
2020.03.24 评论已经全局关闭,有事加QQ聊天