开发者学堂课程【Scala 核心编程-基础:Scala 整型】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8892
Scala 整型
目录:
一、Scala 数据类型列表
数据类型 |
描述 |
Byte |
8位有符号补码整数。数值区间为-128到127 |
Short |
16位有符号补码整数。数值区间为-32768到32767 |
Int |
32位有符号补码整数。数值区间为-2147483648到2147483647 |
Long |
64位有符号补码整数。数值区间为-9223372036854775808到9223372036854775807 |
Float |
32位, IEEE 754标准的单精度浮点数 |
Double |
64位IEEE 754标准的双精度浮点数 |
Char |
16位无符号Unicode字符,区间值为U+0000到UFFFF |
String |
字符序列 |
Boolean |
true或false |
Unit |
表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 |
Null |
null |
Nothing |
Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。 |
Any |
Any是所有其他类的超类 |
AnyRef |
AnyRef类是Scala里所有引用类(reference class)的基类 |
表格中这些数据类型是最常用的。
比如,Byte,表示一个整数,是八位有符号位的整数,范围是-128到127。
特别需要注意的是 Unit。
Unit 类型,在 Scala 中表示是没有返回值,它等同于 void,所以 unit 只有一个实例值,就是(),这个小括号等价于以前的 void,看到小括号就代表是 Unit 只有一个值。
Nothing 是 Scala 类层级的最低端,是任何其他类型的子类型。
如果需要构建一种数据能够交给任何变量或函数,可以把它做成 Nothing 数据类型。如:为了让异常可以不停的往上抛,就把异常做成 Nothing 类型。
Any 是所有其他类的超类。可以回想数据类型图。
AnyRef 是所有引用类型。
二、整型的类型
Scala 的整数类型就是用于存放整数值的,比如12,30,3456等等
1、整型的数据类型有:
数据类型 |
描述 |
Byte[1] |
8位有符号补码整数。数值区间为-128到127 |
Short[2] |
16位有符号补码整数。数值区间为-32768到32767 |
Int[4] |
32位有符号补码整数。数值区间为-2147483648到2147483647 |
Long[8] |
64位有符号补码整数。数值区间为-9223372036854775808到9223372036854775807=2 的(64-1)次方-1 |
整型的数据类型有 Byte/Short/Int/Long 这四个。
在 Long[8]中,为什么是数值区间为-9223372036854775808到9223372036854775807=2 的(64-1)次方-1 的范围?
在 Int[4]中,是四个字节表示一个 int,它的范围,为什么是-2147483648到2147483647?
建议再去学习老师讲的二进制,要把一个数的原码、补码、反码学明白,再复习一次。整体理解计算机的运行原理。
在计算机里面有没有减法?没有。因为加一个负数,就代表减去一个数。所以,这里的负数要比正数多一个。
2、二进制实例说明
32位有符号补码整数。数值区间为-2147483648 到2147483647
[符号位 01位]
比如,有个32位,第一位是符号位,后面就是值,01位。
0表示正数。1表示负数。
最大的正数是:01111111 11111111 11111111 11111111
=> 2的31次方-1 = 2147483647
最小的负数是:11111111 11111111 11111111 11111111
=> -(2的31次方-1) = -2147483647
理论上是 -2147483647这个值。
实际上为什么负数要多一个,是-2147483648这个值呢?假如:
00000000 00000000 00000000 00000000 => +0
10000000 00000000 00000000 00000000 => -0
这里的+0和-0都是0,在二进制里把-0借过来作为补码转换成更大的一个数。所以,
-(2的31次方-1)= -2147483648
在计算机的二进制里把-0当作一个更大的数记录。
3、案例演示
"min ="+ Byte. MinValue
"max ="+ Long. MinValue
在 Scala 里,提供了一个方法,Byte. MinValue 和 maxValue 可以算出最大值和最小值。
新建 Create New Scala Class,Name 为 TyepDemo03,Kind 为 Object
打开编辑 long 的最大值,
package com.atguigu.chapter02.datatype
object TyepDemo03{
def main(args: Array[String]): Unit = {
println("long的最大值"+Long.MaxValue +"~"+ Long .MinValue )
}
执行结果为:
long 的最大值9223372036854775807~-9223372036854775808
看到最大值和最小值。
对于大数据来说,这个数值根本就不够用。大数据远超这个值。若超过这个数值怎么办?后边会学习专门处理大数据的类。就是用一个数转成一个字符串,然后再进行运算。运算时仍然参考加减乘除的运算规则来处理。
三、整型的使用细节
1、Scala 各整数类型有固定的表数范围和字段长度,不受具体 OS 的影响,以保证 Scala 程序的可移植性。
2、Scala 的整型常量/字面量默认为 Int 型,声明 Long 型常量/字面量须后加‘l’或'L'[反编译看]
3、Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long
4、案例
var
c
= 11
//c 就是 Int 类型
print
l
n("c="
+ c)
var
d= 12
l
//d 就是 Long 类型,或者 var d = 12L
print
l
n("d=" + d)
var
e = 9223372036854775807
//正确吗?如何解决
var c = 11 c 等于11的整型。println("c=" + c) 输出11
var d= 12l 把12l 赋值给 d,d 是 long 类型。println("d=" + d)输出为12
把9223372036854775807这个数交给 e 类型,行吗?
var e = 9223372036854775807
这里给值的时候,字面量也是有类型的,默认为 Int 类型。超过范围就会报错。报错的原因并不是 e 的问题,会提示Integer number is out of range for type Int。说明这个数值超过了 Int。可以加一个 L 解决。
打开 object TyepDemo03,继续编辑,给 i、j 赋值
var i = 10 //i 为 Int 类型
var j = 10l //j 为 Long 长整型
var e = 9223372036854775807l // 9223372036854775807超过 int
……
在数值后面加上 l,即为一个长整型。