【大纲】
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dfa00e418c88b72dcae979b1dc66aac5.png#pic_center)
【正文】
1.【结论】运算符与表达式概念
用来拼接变量或常量的符号,就是运算符
通过运算符连接起来的式子,就是表达式
# 说明:scala中,运算符也是函数。如,1 + 2 实际上是1.+(2)
2.分类
2.1.【结论】算数运算符
算数运算 | 使用示例 | 说明 |
---|
+ | 1 + 1 # 2 | 加、正数、字符串拼接 |
- | 2 - 1 # 1 | 减、负数 |
* | 2 * 2 # 4 | 乘 |
/ | 5 / 3 # 1 | 商 |
% | 5 % 3 # 2 | 取余 |
# 注意:
0.scala中没有 ++ 和 -- ,用 += 1 和 -= 1 来替代
1.整数相除的结果,还是整数。 如果想获取到小数,则必须有浮点型数据参与。如,10 / 3 = 3,10 / 3.0 = 3.3333333333
2.关于%操作, 假设求a % b的值, 它的底层原理是:a - a/b * b
2.2.【结论】赋值运算符
赋值运算 | 使用示例 | 说明 |
---|
= | a = b | 把变量b的值给变量a |
+= | a += b | a = a + b |
-= | a -=b | a = a - b |
*= | a *= b | a = a * b |
/= | a *= b | a = a / b |
%= | a %= b | a = a % b |
2.3.【结论】关系运算符
关系运算 | 使用示例 | 说明 |
---|
> | 3 > 2 # true | 大于 |
>= | 2 >= 3 # false | 大于等于 |
< | 2 < 3 # true | 小于 |
<= | 2 <= 3 # true | 小于等于 |
== | 2 == 3 # false | 等于 |
!= | 2 != 3 # true | 不等于 |
scala与java关系算符的不同之处:
功能 | scala | java |
---|
比较数据值或内层元素值 | == 或 != | equals() |
比较地址值 | eq() | == 或 != |
2.4.【结论】逻辑运算符
逻辑运算 | 使用示例 | 说明 |
---|
&& | 2 > 3 && 1 == 1 # false | 短路与 |
俩竖杠 | 2 > 3 俩竖杠 1 == 1 # true | 短路或 |
! | !true # false | 非 |
# 注意:
0.scala中,不支持连续取反。如,!!true会报错。java中允许
2.5.位运算符
2.5.1.【结论】进制
逢几进一就是几进制。如,逢二进一就是二进制、逢十进一就是十进制
进制名 | 数据组成规则 | 示例 |
---|
二进制 | 数据以0b或0B开头,由数字0或1组成 | 0b10001001 |
八进制 | 数据以0开头,由数字0~7组成 | 064 |
十进制 | 数据无特殊开头,由数字0~9组成 | 33 |
十六进制 | 数据以0x或0X开头,由0~9或A-F组成(大小写均可) | 0x66ABC |
# 注意:
关于二进制的数据,最前边的那一位是符号位,0表示正数,1表示负数。其他位是数值位。如,0b10001001是一个负数、0b00101010是一个正数
2.5.2.【结论】8421码
二进制位 0 0 0 0 0 0 0 0
对应的十进制数据 128 64 32 16 8 4 2 1
方便计算十进制与二进制间的转换
2.5.3.【结论】原反补码
0.原反补码,指的都是二进制数据
1.计算机底层存储、操作和运算数据、都是采用数据的二进制补码
2.原码
十进制的数据转成二进制数据,这个二进制就是原码
3.正数
正数的原码、反码、补码都一样,不需要特殊计算
4.负数
反码:
原码的符号位不变,数值位按位取反
补码:
反码 + 1
2.5.4.【结论】位运算
0.位运算
按照位Bit来快速计算数据值
1.只针对整型数据
2.作用
海量数据时,位运算可实现高效修改数据值的操作
3.位运算操作的是数据的二进制补码形式
位运算 | 使用示例 | 说明 |
---|
& | 2 & 2 # 2 | 二进制每位相与 |
一个竖杠 | 2 一个竖杠 2 # 2 | 二进制每位求或 |
^ | 2 ^ 2 # 0 | 二进制每位异或 |
~ | ~2 # -3 | 二进制每位取反 |
<< | 2 << 1 # 4 | 二进制左移,右侧补0 (说人话,就是乘以2多少次) |
>> | 2 >> 1 # 1 | 二进制右移,移到右端的低位舍弃,正数左侧补0,负数左侧补1 (说人话,就是除以2多少次,值取小) |
>>> | – | 二进制无符号右移,空位用0补齐(?) |
&= | a &= b | a = a & b |
# 注意:
0.小技巧:一个数字被同一个数字位异或两次,该数字值不变。如,10 ^ 20 ^ 20,结果还是10