感觉 平时用 Int
就行了, 除非是特殊场景需要优化性能,否则感觉用不到 Byte
Short
遇到很长的 就用 Long
那如果 要处理比 Long
更大的数呢? 就用 BigInteger
类, 但是这个类不是 kotlin 标准库的一部分,需要导入 import java.math.BigInteger
类型 | 大小(比特数) | 最小值 | 最大值 |
---|---|---|---|
Byte | 8 | -128 | 127 |
Short | 16 | -32768 | 32767 |
Int | 32 | -2,147,483,648 (-231) | 2,147,483,647 (231 - 1) |
Long | 64 | -9,223,372,036,854,775,808 (-263) | 9,223,372,036,854,775,807 (263 - 1) |
val one = 1 // Int 根据长度 自动推断为Int
val threeBillion = 3000000000 // Long 根据长度 自动推断为Long
val oneLong = 1L // Long 手动指定为Long
val oneByte: Byte = 1 // 手动指定为Byte
和其他语言差不多,就是处理小数的, 可承受范围不一样
类型 | 大小(比特数) | 有效数字比特数 | 指数比特数 | 十进制位数 |
---|---|---|---|---|
Float | 32 | 24 | 8 | 6-7 |
Double | 64 | 53 | 11 | 15-16 |
val pi = 3.14 // Double 所有小数,默认情况自动推断为Double,而不是Float,因为Double的范围更大,精度更高(容错性更好?)
// val one: Double = 1 // 错误:类型不匹配 , 手动声明为Double,但是实际跟的却是整数1,所以报错, 必须得 加个小数点, 如 1.0
val oneDouble = 1.0 // Double 自动推断为Double
val e = 2.7182818284 // Double 自动推断为Double
val eFloat = 2.7182818284f // Float,实际值为 2.7182817 , 因为 Float 只能承受 6-7 位的十进制位数,超过承受范围就会溢出
在数字里加下划线主要是方便 人眼辨势,方便阅读,不会影响程序的执行结果
val oneMillion1 = 1000000 // 一百万, 但是人眼看起来不方便,不容易阅读
val oneMillion2 = 1_000_000 // 一百万, 人眼看起来方便,容易辨势
val creditCardNumber1 = 1234567890123456L // Long类型,不容易阅读
val creditCardNumber2 = 1234_5678_9012_3456L // Long类型,银行卡、信用卡号码 配合 下划线,方便阅读
val bornNumber1 = 19991122L // 出生日期
val bornNumber2 = 1999_11_22L // 出生日期
val hexBytes1 = 0xFFECDE5E // 16进制 用0x开头
val hexBytes2 = 0xFF_EC_DE_5E // 16进制 用0x开头
val bytes1 = 0b11010010011010011001010010010010 // 2进制 用0b开头
val bytes2 = 0b11010010_01101001_10010100_10010010 // 2进制 用0b开头
不同类型的数字不能直接赋值,需要转换 调用数字的方法,把数字转换为其他类型
toByte(): Byte
// 转换为BytetoShort(): Short
// 转换为ShorttoInt(): Int
// 转换为InttoLong(): Long
// 转换为LongtoFloat(): Float
// 转换为FloattoDouble(): Double
// 转换为Double val b: Byte = 1
// val i: Int = b // 错误, 类型不同,不能直接赋值
val i1: Int = b.toInt() // 调用b的toInt方法,把b转换为Int,转换后的结果就可以赋值给Int类型了
就是其他语言都支持的 四则运算, 没啥难点
println(1 + 2)
println(2_500_000_000L - 1L)
println(3.14 * 2.71)
println(10.0 / 3)
println(10.0 % 3)
这位运算 就是 infix 修饰的函数 我平时用不到位运算,所以就不花时间学了,知道有这个东西就行了
val x = (1 shl 2) and 0x000FF000
shl(bits)
– signed shift leftshr(bits)
– signed shift rightushr(bits)
– unsigned shift rightand(bits)
– bitwise ANDor(bits)
– bitwise ORxor(bits)
– bitwise XORinv()
– bitwise inversion