目录
原码,反码,补码
一.算数运算符
1.种类
2.i++和i–的区别
3.优先级
4.注意
二.关系运算符
1.分类
2.注意
三.位运算符
1.分类
>和>>>详解">2.>>和>>>详解
四.赋值运算符
五.字符串连接符
六.三目运算符
七.优先级
原码:二进制表示法,最高位是符号位,"0"表示正,"1"表示负,其余是数值位
反码:正数的反码与原码相同,负数的反码就是对其原码逐一取反,符号位除外
补码:正数的补码与原码相同,负数的补码是在反码的末尾加1
注意:我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式保存的。
i++:先赋值后加1
++i:先加1后赋值
只要记住程序是从左往右运行的就行
优先级:单目>双目>三目
单目:只有一个操作数,比如++和–
双目:1+2
0.1+0.2不等于0.3
所以千万不要使用小数进行比较
==比较的是基本类型的大小,而引用类型是比较地址
==是比较,=是赋值
>>和<<
符号位不变
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没法表示,如果你会的话评论下面教教我
注意:
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;
以下优先级由高到低