Java:常用位运算

前言补充

1、位运算用于对二进制数进行操作(一般是对整数的二进制补码进行操纵)。
2、正数的原码、反码、补码都是十进制数直接转换为二进制的形式,而负数则不同。
3、负数的原码是十进制数直接转化为二进制数,但最高位为1,代表符号数(1为负数,0为正数)。负数反码为除了符号数意外其他位数字取反(即1变为0,0变为1)。负数补码 = 反码+1。

一、Java常见运算符

在这里插入图片描述

二、运算符详解

1、~ 按位非运算(NOT):按位取反
例:
52的二进制数为0011 0100(按八位举例,下同)

~0011 0100
 1100 1011

即~52=75

2、& 按位与运算(AND): 运算的数同时为1结果为1,其他情况结果为0
例:
52&13

 0011 0100
&0000 1101
------------
 0000 0100

即52&13=4

3、| 按位或运算(OR):运算的数只要有一个为1,其结果为1
例:
52|13

 0011 0100
|0000 1101
------------
 0011 1101

即52|13=61

4、^ 按位异或运算 (XOR):运算的数要是不相同就返回1,相同返回0

52^13

 0011 0100
^0000 1101
------------
 0011 1001

即52^13=57

5、<< 左移,低位补零
例:
52<<2(52左移两位)

 0011 0100<<2
------------
 1101 0000

即52<<2=208

6、>> 右移,高位补和第一位相同的数字
例6-1:
52>>2

 0011 0100>>2
------------
 0000 1101

即52>>2=13
例6-2:
-52>>2

-52原码: 1011 0100
-52反码: 1100 1011
-52补码: 1100 1100
-52>>2   1100 1100>>2
-----------------------
		 1111 0011

即-52>>2=-13

7、>>> 无符号右移,高位补零
例:
52>>>2

 0011 0100>>>2
------------
 0000 1101

即52>>>2=13

详解总结

1、<< 1 相当于乘以2

2、>> 1 相当于除以2

3、>>> 不考虑高位的正负号,正数的 >>> 等同于 >>

Guess you like

Origin blog.csdn.net/UncleBlain/article/details/108904412