Java运算符
按照操作数的数目进行划分
单目 | a++ |
---|---|
双目 | a+b |
三目 | (a>b)?x:y |
按照运算符功能进行划分
算数运算
+、 -、 *、 /:加、减、乘、除
%:取余、取模
++:自增 (放在变量前面先加后用;放在变量后面先用后加)
–:自减
赋值运算
=:将等号右边的值赋值给等号左边
+=、-=、*=、/=、%=:加等、减等、乘等、除等、取模等
x+=1;相当于x=x+1;
关系运算(比较)
<、<=、>、>=、!=、==
逻辑运算
逻辑运算前后连接的两个都是boolean类型
- &逻辑与 :两个都为true,结果为true
- |逻辑或 :有一个为true,结果为true
- ^逻辑异或 :两个相反,结果为true
- !逻辑非:false的非是true
- &&短路与:两个数里第一个数为false,后面的就不用执行:和&得到的结果都为false
- ||短路或:两个数里第一个数为true,后面的就不用执行:和|得到的结果都为true
位(bit)运算
对二进制中每一个bit进行操作
1、先将十进制数转换成二进制数
2、按照位置进行运算(1–>true,0–>false)
3、将二进制结果转化成十进制
- 按位与(&)
十进制 | 二进制 |
---|---|
1 | 00000001 |
2 | 00000010 |
1&2==0 | 00000000 |
- 按位或(|)
十进制 | 二进制 |
---|---|
1 | 00000001 |
2 | 00000010 |
1按位或2==3 | 00000011 |
- 按位异或(^)
十进制 | 二进制 |
---|---|
1 | 00000001 |
2 | 00000010 |
1^2 | 00000011 |
- 按位取反(~)
二进制中每一个bit位都0变1,1变0
- 按位左位移(<<)
末位补0
相当于乘以2的位移次幂
十进制 | 二进制 |
---|---|
6 | 00000000 00000000 00000000 00000110 |
6<<1 | 00000000 00000000 00000000 00001100 |
- 按位右位移(>>)
末尾移除
相当于除以2的位移次幂
保留符号位,原来是1就写1,原来是0就写0
十进制 | 二进制 |
---|---|
6 | 00000000 00000000 00000000 00000110 |
6>>1 | 00000000 00000000 00000000 00000011 |
- 按位右位移(>>>):无符号
位移之后不保留符号,原来不管是什么都补0
十、二、八、十六进制之间的转换
十进制0123456789
二进制01
十进制---->二进制:十进制数除以2取余数,将余数倒叙排列
二进制---->十进制:从右至左边,每一个bit位乘以2的位置次幂,加和
八进制01234567
每三个二进制的bit位记录为一组,求出每组的十进制,表示形式以0开头
十六进制0123456789ABCDEF
每四个二进制的bit位记录为一组,求出每组的十进制,表示形式以0X开头
源码、反码、补码
正数
源码、反码、补码是一样的
十进制:6 | 二进制 |
---|---|
原码 | 00000000 00000000 00000000 00000110 |
反码 | 00000000 00000000 00000000 00000110 |
补码 | 00000000 00000000 00000000 00000110 |
负数
原码:要将符号位置改为1
反码:保持符号位不动,按照原码按位取反
补码:在反码的基础上加1
十进制:-6 | 二进制 |
---|---|
原码 | 10000000 00000000 00000000 00000110 |
反码 | 11111111 11111111 11111111 11111001 |
补码 | 11111111 11111111 11111111 11111010 |
注意:计算机中都是以补码的形式存储的