文章目录
原码,反码,补码
原码:二进制表示法,最高位是符号位,"0"表示正,"1"表示负,其余是数值位
反码:正数的反码与原码相同,负数的反码就是对其原码逐一取反,符号位除外
补码:正数的补码与原码相同,负数的补码是在反码的末尾加1
注意:我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式保存的。
一.算数运算符
1.种类
符号 | 名称 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
++ | 自增 |
– | 自减 |
2.i++和i–的区别
i++:先赋值后加1
++i:先加1后赋值
只要记住程序是从左往右运行的就行
3.优先级
优先级:单目>双目>三目
单目:只有一个操作数,比如++和–
双目:1+2
4.注意
0.1+0.2不等于0.3
所以千万不要使用小数进行比较
二.关系运算符
1.分类
符号 | 名称 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
2.注意
==比较的是基本类型的大小,而引用类型是比较地址
==是比较,=是赋值
三.位运算符
1.分类
符号 | 名称 | 解释 |
---|---|---|
& | 位与 | 两边都是true,结果才是true |
| | 位或 | 两边一个是true,结果就是true |
! | 位非 | 取反 |
^ | 位异或 | 两边不一样,结果就是true |
~ | 按位非 | 将内存中的二进制位逐一取反(注意内存中保存的是二进制的补码) |
>> | 右移运算符(考虑符号位) | 二进制向右移动 |
<< | 左移运算符(考虑符号位) | 二进制向左移动 |
>>> | 右移运算符(不考虑符号位) | 二进制向右移动 |
&& | 且,短路与 | 和 & 一样,如果第一个是false,第二个就不执行了, 但是 & 第二个也会执行 |
|| | 或,短路或 | 如果第一个是true,第二个就不执行了, 但是 |第二个会执行 |
2.>>和>>>详解
>>和<<
符号位不变
8>>2
0000 1000
运算后: 0000 0010
结果:2
面试经常问的就是如何计算2的3次方
result = 2<<2;
因为是直接操作内存中的2进制数,所以会比较快
8<<2
运算后:0010 0000
-1<<2
-1的原码:1000 0001
反码:1111 1110
补码:1111 1111(内存中保存的就是补码)
<<运算后:1111 1100
反码:1111 1011
原码:1000 0100
结果:-4
-1>>2
-1的原码:1000 0001
反码:1111 1110
补码:1111 1111(内存中保存的就是补码)
>>运算后:1111 1111
结果没有变
规律:
符号位不变,移动其他位
>>>
符号位变
8>>>2
补码:0000 1000
>>>后:0000 0010
-128>>>2
-128的原码:1000 0000
反码:0111 1111
补码:1000 0000(内存中保存的就是补码)
>>>运算后:1110 0000
注意没有<<<
注意:以上的都是模拟8位2进制数来计算的,实际上-128没法表示,如果你会的话评论下面教教我
四.赋值运算符
符号 | 解释 |
---|---|
= | 把左边的值赋值给右边 |
+= | i+=2等价于i = i + 2 |
-= | i-=2等价于i = i - 2 |
*= | i*=2等价于i = i * 2 |
/= | i/=2等价于i = i / 2 |
%= | i%=2等价于i = i % 2 |
注意:
byte b = 2;
b = (int)(b + 2);//需要强转
b += 2;//不需要强转
五.字符串连接符
"+"号既是数值运算符号也是字符串的拼接符号
String str = "hello";
int a = 10;
str = str + a;//str会变成hello10
六.三目运算符
语法 : boolean表达式 ? 真语句 : 假语句;
int i = 0;
// 需求 : 如果为真 给变量i 赋值1,否则赋值 11
i = 2<3 ? 1 : 11;
七.优先级
以下优先级由高到低
运算符分类 | 结合顺序 | 运算符 |
---|---|---|
分隔符 | 左结合 | .[]();, |
一元运算符 | 右结合 | ! ++ – - ~ |
算术运算符 | 左结合 | * / % + - |
移位运算符 | 左结合 | << >> >>> |
关系运算符 | 左结合 | < > <= >= instanceof == != |
逻辑运算符 | 左结合 | ! && ||~ & |^ |
三目运算符 | 右结合 | 布尔表达式?表达式1:表达式2 |
赋值运算符 | 右结合 | = *= /= %= += -= <<= >>= >>>= &= *= |= |