按操作数的数目分类
按运算符的功能分类
算数运算
+ - / % ++ —
注意 int a = 1; a = a++; //a的结果永远是1
值的运算是在一个临时空间进行的(可以理解为副本/备份空间)
++a是先自增然后备份 a++是先备份后自增
最后会将副本/备份空间中的结果赋值给别人
赋值运算
= += -= = /= %=
注意 byte b =1;
b += 2;
b = b+2;//编译出错
关系运算
> >= < <= != ==
逻辑运算
&逻辑与 |逻辑或 ^逻辑异或 !逻辑非 &&短路与 ||短路或
其中^逻辑异或 前后结果不一致时就返回true
位(bit)运算
&按位与 |按位或 ^按位异或 ~按位取反(单目运算符)
<<按位左位移 >>按位右位移 >>>无符号右位移
&按位与 两个数bit位都为1时才为1
|按位与 两个数bit位只要有一个为1时就为1
^按位异或 两个数bit位只要不一样就为1
~按位取反
<<按位左位移 相当于乘以2的位移次幂
>>按位右位移 相当于除以2的位移次幂 在保留符号位的情况下进行右位移
>>>无符号右位移 不保留符号位进行右位移 即右移后都添0
6 | -6 | |
---|---|---|
原码 | 0 110 | 1 110 |
反码 | 0 110 | 1 001 |
补码 | 0 110 | 1 010 |
计算机中符号位正数为0 负数为1
正数原码、反码、补码相同
负数bit为的第一位作为符号位
负数反码 在负数原码的基础上 符号不动 其余取反
负数补码 在负数反码基础上+1
计算机中正数负数 存储形式都是以补码形式来存储
然后需要转换为原码来输出
~9 二进制为 1001
其补码为 0 1001
~ 后得 1 0110
转为原码 1 1010(先减一得1 0101 然后取反得 1 1010 负数符号位不动)
所以最终结果为 -10