java中的位运算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的位运算相关的知识,希望对你有一定的参考价值。
java中的位运算有7个:
- & 按位与
- | 按位或
- ~ 按位非
- ^ 按位异或
- << 左移运算
- >> 右移运算
- >>> 无符号右移运算
位运算符的运算法则如下:
public static void main(String[] args) { System.out.println(5 & 9); System.out.println( 5 | 9); System.out.println(~-5); System.out.println(5 ^ 9); }
运行输出结果为:
我们先来看看那5 & 9 和5 | 9的运算:
5的二进制码: 0101 0101 9的二进制码: &1001 |1001 结果: 0001 1101
程序执行~-5的结果是 4
-5的源码:100000000000000000000000000000101 除符号位按位取反 -5的反码:111111111111111111111111111111010 反码加1得到补码 -5的补码:111111111111111111111111111111011 取反后最高位符号为0 -5的补码:000000000000000000000000000000100
记住:原码(出符号位)取反得到得到反码,反码加一得到得到补码
5 ^ 9的值是12,运算过程如下:
(省略24个0) 5的二进制:00000101 9的二进制:00001001 异或 :00001100
左移运算
左移运算是将运算数的二进制码整体左移指定的位数,左移后右边空出来的位以0填充(负数在计算机中是以补码的形式存在,左移运算时也是运算补码)
public static void main(String[] args) { System.out.println(5 << 2); System.out.println(-5 << 2); }
打印结果是20 -20
右移运算:
java中的右移运算有两个:>>,>>>,对于>>而言,把第一个操作数的二进制向右移动指定的位数,左边的位置以原来的符号位填充,
>>>是无符号右移运算,他把第一个操作数的二进制码右移指定的位数后,左边空出来的数用0填充,
<<,>>,>>>这三个运算符只合适于对byte、short、long、int、char等帧数运算,进行位运算需要遵循如下规则:
- 对于低于 int 类型的操作数必须先自动转换为int类型再位移
- 对于int 类型的整数位移a<<b,当b>32时,系统会先用b对32求余,得到的数值才是真正的求余数
- long类型与int类型雷同
以上是关于java中的位运算的主要内容,如果未能解决你的问题,请参考以下文章