第三章 - 运算符
Read Me
- ? Code : 本章节代码实现
- ? CSDN : wangt的博客
- ☁️ Github : https://github.com/lovewangtzq
- ❤️ 微信公众号 : 大数据初学者
- ? b站: 我学不会Spark
运算符种类介绍 ?
1. 算术运算符
2. 赋值运算符
3. 比较运算符(关系运算符)
4. 逻辑运算符
5. 位运算符
算术运算符 ⭐️
-
算术运算符列表
运算符 运算 范例 结果 + 正号 +3 3 - 负号 b=4; -b -4 + 加 5+5 10 - 减 6-4 2 ***** 乘 3*4 12 / 除 5/5 1 % 取模(取余) 7%5 2 + 字符串相加 “He”+”llo” “Hello” -
⭐️ ❤️细节说明
- 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:var x : Int = 10/3 ,结果是 3
- 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到取模的一个本质运算(和java 的取模规则一样)。比如 : -10 % 3 = -10 - (-10) / 3 2 3^2 32
- ⭐️注意:Scala中没有++、–操作符,需要通过+=、-=来实现同样的效果
-
☁️代码案例
package operator /** * 算术运算符 的基本用法 * @author 王天赐 * @create 2019-07-13 9:18 */ object ArithmeticOperator { def main(args: Array[String]): Unit = { // 假如还有97天放假,问:xx个星期零xx天 var currentDay = 97 var week = 97 / 7 var day = 97 % 7 println(s"${week}个星期零${day}天") // 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[测试:232.5] // 这里需要特别注意 5 / 9 默认结果是 Int 类型的 所以计算结果是 0 var Celsius = (5 / 9.toDouble) * (232.5 - 100) printf("Celsius :%.2f" , Celsius) } } // 结果 13个星期零6天 Celsius :73.61
关系运算符 ⭐️
-
基本介绍
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false
- 关系表达式 经常用在 if结构的条件中或循环结构的条件中
- 关系运算符的使用和java一样
-
关系运算符列表
运算符 运算 范例 结果 == 相等于 4==3 false != 不等于 4!=3 true < 小于 4<3 false > 大于 4>3 true <= 小于等于 4<=3 false >= 大于等于 4>=3 true -
⭐️细节说明
- 关系运算符的结果都是Boolean型,也就是要么是true,要么是false。
- 关系运算符组成的表达式,我们称为关系表达式。 a > b
- 比较运算符“==”不能误写成“=”
- 使用陷阱: 如果两个浮点数进行比较,应当保证数据类型一致.
逻辑运算符 ⭐️⭐️
-
逻辑运算符列表
假定变量 A 为 true,B 为 false
&& 逻辑与 (A && B) 运算结果为 false || 逻辑或 (A || B) 运算结果为 true ! 逻辑非 !(A && B) 运算结果为 true
赋值运算符 ⭐️⭐️
-
赋值运算符列表
运算符 描述 实例 = 简单的赋值运算符,将一个表达式的值赋给一个左值 C = A + B 将 A + B 表达式结果赋值给 C += 相加后再赋值 C += A 等于 C = C + A -= 相减后再赋值 C -= A 等于 C = C - A *= 相乘后再赋值 C *= A 等于 C = C * A /= 相除后再赋值 C /= A 等于 C = C / A %= 求余后再赋值 C %= A 等于 C = C % A 运算符 描述 实例 <<= 左移后赋值 C <<= 2 等于 C = C << 2 >>= 右移后赋值 C >>= 2 等于 C = C >> 2 &= 按位与后赋值 C &= 2 等于 C = C & 2 ^= 按位异或后赋值 C ^= 2 等于 C = C ^ 2 |= 按位或后赋值 C |= 2 等于 C = C | 2 -
赋值运算符的特点
-
运算顺序从右往左
-
赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值/字面量
-
复合赋值运算符等价于下面的效果
比如:a+=3 等价于a=a+3
-
-
☁️ 代码案例
package operator /** * 赋值运算符 * @author 王天赐 * @create 2019-07-13 11:06 */ object AssignmentOperator { def main(args: Array[String]): Unit = { var v = 2 // <<= 左移 : 左移3相当于乘以2的3次方 v <<= 3 println("v : " + v) // >>= 右移 右移3相当于除以3的2次方 v >>= 3 println("v : " + v) // &= 按位与 运算规则 : 先转化为二进制 然后进行运算 // 比如 : 10 => 00001010 , 8 => 00001000 // 8 和 10 进行运算时 如果对应位上 只有有一个为 0 结果就是 0 全为1 结果为1 // 8 & 10 结果应该是 00001000 => 8 var v01 = 10 v01 &= 8 println(v01) // 结果 8 // ^= 按位异或 // 与上同理 只不过规则不同 : 相同为 0 , 不同为 1 ,就是 两个都是 0或者都是 1 结果为 0, 两个不同是 1 // 10 => 00001010 , 8 => 00001000 // 结果是 00000010 => 2 var v02 = 10 v02 ^= 8 println(v02) // 结果 2 // |= 按位或 : 规则 只要有一个是 1 结果就是 1 var v03 = 10 v03 |= 8 println(v03) // 结果 10 } }
-
特别注意 : Scala不支持三目运算符 , 在Scala 中使用 if – else 的方式实现。
package operator /** * 实现三目运算符的功能 * @author 王天赐 * @create 2019-07-13 15:32 */ object TrinocularOperator { def main(args: Array[String]): Unit = { // Scala不支持三目运算符 , 在Scala 中使用 if – else 的方式实现 var v01 = 10 var v03 = 1 var v02 = 21 // Scala 中支持代码块返回值 // 计算两个值中的最大值 var max2 = { if (v01 > v02) { v01 }else{ v02 } } // 判断三个值中最大的值 var max3 = { if(v01 > v02){ if(v01 > v03){ v01 }else{ v03 } }else{ if(v02 > v03){ v02 }else{ v03 } } } } }
-
位运算符
a = 60 , b =
运算符 描述 实例 & 按位与运算符 (a & b) 输出结果 12 ,二进制解释: 0000 1100 | 按位或运算符 (a | b) 输出结果 61 ,二进制解释: 0011 1101 ^ 按位异或运算符 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 ~ 按位取反运算符 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 << 左移动运算符 a << 2 输出结果 240 ,二进制解释: 1111 0000 >> 右移动运算符 a >> 2 输出结果 15 ,二进制解释: 0000 1111 >>> 无符号右移 A >>>2 输出结果 15, 二进制解释: 0000 1111 -
使用位运算符 不使用中间变量调换两个变量的值
package operator /** * 使用位运算符 不使用中间变量调换两个变量的值 * @author 王天赐 * @create 2019-07-13 15:51 */ object BitOperator { def main(args: Array[String]): Unit = { var a = 1 var b = 2 // 使用位运算符进行替换 (按位异或) // 原理比较简单 => a = 0001 b = 0010 // a ^ b = 0001(a) ^ 0010(b) = 0011(3) // 0001(a) ^ 0011(c) = 0010(b) 注意 a 和 b 按位异或的结果 c , a ^ c = b // 很明显 b ^ c = a , a ^ c = b a ^= b // a = a ^ b = c b ^= a // b = b ^ c(此时a的值是c) = a a ^= b // a = c ^ a = b println(s"a = ${a} , b = ${b}") } }
-
关于运算符的优先级问题
建议使用 () 来提升或者区分优先级 !
键盘输入语句 ⭐️
-
介绍
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.scala
-
☁️ 代码案例
package operator import scala.io.StdIn /** * 测试 键盘输入 * @author 王天赐 * @create 2019-07-13 16:39 */ object InputDemo { def main(args: Array[String]): Unit = { println("请输入姓名 : ") var name = StdIn.readLine() println("请输入年龄 : ") var age = StdIn.readInt() println(s"[${name},${age}]") } }