java中的运算符
逻辑运算
+
-
*
/
%
&&
||
!
<
>
==
>=
<=
位运算
按位与(&)
- 如果两个二进制位上的数都是1,那么运算结果为1,其他情况运算结果均为0
- 示例:1 & 1 = 1、1 & 0 = 0、 1 & 0 = 0、 0 & 0 = 0
按位或(|)
-
两个二进制位上的数字如果都为0,那么运算结果为0,否则运算结果是1
-
示例:0 | 0 = 0、0 | 1= 1、1 | 0 = 1、 1 | 1 = 1
按位异或(^)
- 两个二进制位上的数字如果相同,则运算结果为0;如果两个二进制位上的数字不相同,则运算结果为1
- 示例: 1 ^ 0 = 1、 0 ^ 1 = 1、1 ^ 1 = 0、0 ^ 0 = 0
左移(<<)
- 表示二进制左位移,不分正负数,低位补0。(等价于十进制数值乘以2的N次方,N是位移的量)
- 示例:0000 0101<<3 = 0010 1000
右移(>>)
- 表示右移,如果该数为正,则高位补0,若为负数,则高位补1。(带符号右移也具有”类似”除以2的N次方的效果,N是位移量)
- 对于任何一个byte、short或者int类型的数据而言,带符号右移31位之后,得到的必然是0或者是-1。
对于long类型的数据而言,带符号右移63位之后,得到的也必然是0或者是-1 - 示例:0001 0100 >> 2 = 0000 0101
无符号右移(>>>)
- 无符号右移在二进制串移动之后,空位由0来补充,与符号位是0还是1毫无关系
取反(~)
- 对每个二进制位进行取反操作,所谓取反就是原来二进制位上如果是0,那么就变成1,反之,如果原来二进制位上是1,那么就变为0
- 示例:~ 101 = 010、~ 11110 = 00001
二进制
计算机在任何情况下都只能识别二进制
计算机在底层存储数据的时候,一律存储的是“二进制的补码形式”。计算机采用补码形式存储数据的原因是:补码形式效率最高
二进制码
- 原码
- 反码
- 补码
拓展
-
正数
-
对于一个正数来说:二进制原码、反码、补码是同一个,完全相同
-
负数
原码反码补码关系如下:
对应的二进制原码:10000001(首位是符号位,1表示负号)
对应的二进制反码:11111110(符号位不变,其它位取反)
对应的二进制补码:11111111(反码+1)