导航🌌
目录
📀运算符分类
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。主要有以下几类:
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 三元运算符
📀算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +7 | 7 |
- | 负号 | b = 11; -b | -11 |
+ | 加 | 9 + 9 | 18 |
- | 减 | 10 - 8 | 2 |
* | 乘 | 7 * 8 | 56 |
/ | 除 | 9 / 9 | 1 |
% | 取模(取余) | 11 % 9 | 2 |
++ ++ | 自增(前置):先运算后取值 自增(后置):先取值后运算 | a = 2; b = ++a a = 2; b = a++ | a = 3; b = 3 a = 3; b = 2 |
-- -- | 自减(前置):先运算后取值 自减(后置):先取值后运算 | a = 2; b = --a a = 2; b = a-- | a = 1; b = 1 a = 1; b = 2 |
+ | 字符串相加 | "Java" + "hehe" | "Javahehe" |
比较特殊的就是底下的字符串相加,可试着运行以下代码体验一下:
public class Test{
public static void main(String[] args){
int n = 1992;
String str1 = n + "";//int型转String类型
String str2 = "Java" + "hehe";
System.out.println(str1);
System.out.println(str2);
System.out.println("Java" + "hehe");
}
}
输出结果:
细节说明:
- 对于除号"/",它的整数除和小数除是有区别的;整数之间做除法时,只保留整数部分而舍弃小数部分
- 当对一个数取余时,可以等价 a % b = a - a / b * b ,这是取模运算的本质。这里要留意Java中可以对浮点数取余,而C/C++只可操作整数
📀关系运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相当于 | 8 == 7 | false |
!= | 不等于 | 8 != 7 | true |
< | 小于 | 8 < 7 | false |
> | 大于 | 8 > 7 | true |
<= | 小于等于 | 8 <= 7 | false |
>= | 大于等于 | 8 >= 7 | true |
instanceof | 检查是否是类的对象 | "javahehe" instanceof String | true |
细节说明:
- 关系运算符的结果都是boolean类型,即true或false
- 关系运算符组成的表达式即关系表达式
- 注意“==”和“=”的区别
📀逻辑运算符
a | b | a & b | a && b | a | b | a || b | !a | a ^ b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
细节说明:
- 逻辑运算符用于链接多个条件(多个关系表达式),最终结果也是一个boolean类型
- 短路与 && ,短路或 || ,取反 !
- 逻辑与 & ,逻辑或 | ,逻辑异或 ^
- 在开发中一般使用短路与、短路或,效率高
- a ^ b: 叫逻辑异或, 当 a 和 b 不同时, 则结果为 true, 否则为 false
名称 | 语法特点 |
---|---|
短路与 && | 如果第一个条件为false,则第二个条件不会判断(执行),最终结果为false,效率高 |
逻辑与 & | 不管第一个条件是否为false,第二个条件都要判断(执行),效率低 |
短路或 || | 如果第一个条件为true,则第二个条件不会判断(执行),最终结果为true,效率高 |
逻辑或 | | 不管第一个条件是否为true,第二个条件都要判断(执行),效率低 |
📀赋值运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | a = 7 | 7 |
+= | 加等 | a = 7;a += 7 | a = 14 |
-= | 减等 | a = 7;a -= 7 | a = 0 |
*= | 乘等 | a = 7;a *= 7 | a = 49 |
/= | 除等 | a = 7;a /= 7 | a = 1 |
%= | 模等 | a = 7;a %= 7 | a = 0 |
细节说明:
- a += 7等价于a = a +7,其他类推
- 除了=之外,其他赋值运算符均为单目运算符,即只有一个操作数
- 运算顺序是从左往右
📀三元运算符
条件表达式 ? 表达式1 : 表达式2;
运算规则:若条件表达式为true,运算后的结果是表达式1;若条件表达式为false,运算后的结果是表达式2
细节说明:
- 三元运算符的结果可以进行赋值或作函数返回值
- 三元运算符可以转换成if - else 语句
📀运算符优先级
运算方向 | 运算符 |
---|---|
. {} [] ; , | |
R ——> L | ++ -- ~ ! |
L ——> R | * / % |
L ——> R | + - |
L ——> R | << >> >>> 位移 |
L ——> R | < > <= >= instanceof |
L ——> R | == != |
L ——> R | & |
L ——> R | ^ |
L ——> R | | |
L ——> R | && |
L ——> R | || |
L ——> R | ? : |
R ——> L | = *= /= %= |
+= -= <<= >>= | |
>>>= &= ^= != |
🍂进制介绍
对于整数,常有以下四种表示方式:
- 二进制:0、1,满2进1,以0b或者0B开头
- 八进制:0~7,满8进1,以数字0开头表示
- 十进制:0~9,满10进1
- 十六进制:0~9及A(10)~F(15),满16进1,以0x或者0X开头表示。A~F不区分大小写
🍂二进制转十进制
规则:从最低位(最右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
实例:将0b1011转成十进制的数,0b1011 = 1 * 2^(1-1) + 1 * 2^(2-1) + 0 * 2^(3-1) + 1 * 2^(4-1) = 1 + 2 + 0 + 8 = 11
🍂八进制转十进制
规则:从最低位(最右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
实例:将0234转成十进制的数,0234 = 4 * 8^0 + 3 * 8^1 + 2 * 8^2 = 4 + 24 + 128 = 156
🍂十六进制转十进制
规则:从最低位(最右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
实例:将0x23A转成十进制的数,0x23A = 10 * 16^0 + 3 * 16^1 + 2 * 16^2 = 10 + 48 + 512 = 570
🍂十进制转二进制
规则:将该十进制数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。(一般使用短除法操作,容易看清楚数据)
🍂十进制转八进制
规则:将该十进制数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。(一般使用短除法操作,容易看清楚数据)
🍂十进制转十六进制
规则:将该十进制数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。(一般使用短除法操作,容易看清楚数据)
🍂二进制转八进制
规则:从低位开始,将二进制数每三位一组,转换成对应的八进制数即可
实例:将0b11010101转成八进制数,0b11(3)010(2)101(5) => 0325
🍂二进制转十六进制
规则:从低位开始,将二进制数每四位一组,转换成对应的十六进制数即可
实例:将0b11010101转成八进制数,0b1101(D)0101(5) => 0xD5
🍂八进制转二进制
规则:将八进制数每1位,转换成对应的一个3位的二进制数即可
实例:将0237转换成二进制数,02(010)3(011)7(111) = 0b10011111
🍂十六进制转二进制
规则:将十六进制数每1位,转换成对应的4位的一个二进制数即可
实例:将0x23B转换成二进制数,0x2(0010)3(0011)B(1011)
🎉二进制在运算中的说明
- 二进制是逢2进位的进位制,0、1是基本算符
- 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于电子方式的实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是逢2进1,数字1在不同位上代表不同的值,按从右至左的次序,这个值以二倍递增
🎉原码、反码、补码(重点、难点)
在Java中,对于有符号的而言:
- 二进制的最高位是符号位:0表示正数,1表示负数(0正1负)
- 正数的原码、反码、补码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其他位按位取反
- 0的反码、补码都是0
- Java没有无符号数,即Java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的
- 当我们看运算结果时,要看他的原码
🎉位运算符
运算符 | 运算规则 |
---|---|
&(按位与) | 两位全为1,结果为1,否则为0 |
|(按位或) | 两位至少有一个为1,结果为1,否则为0 |
^(按位异或) | 相异为1,相同为0 |
~(按位取反) | 0 -> 1,1 -> 0 |
>>(算术右移) | 低位溢出,符号位不变,并用符号位补溢出的高位 |
<<(算术左移) | 符号位不变,低位补0 |
>>>(逻辑右移、无符号右移) | 低位溢出,高位补0 |
注意:无 <<< 符号,位运算符的操作数均是二进制中的每一位数
学习记录:
- 📆本篇博客整理于2022.7.17~2022.7.20
- 🎓作者:如何写出最优雅的代码
- 📑如有错误,敬请指正🌹🌹
- 🥂关注一波不迷路!如果觉得写的不错,看完了别忘了点赞和收藏啊,感谢支持😏😏