kotlin学习笔记-数据类型 数字 numbers

整数类型

感觉 平时用 Int 就行了, 除非是特殊场景需要优化性能,否则感觉用不到 Byte Short 遇到很长的 就用 Long 那如果 要处理比 Long 更大的数呢? 就用 BigInteger 类, 但是这个类不是 kotlin 标准库的一部分,需要导入 import java.math.BigInteger

类型大小(比特数)最小值最大值
Byte8-128127
Short16-3276832767
Int32-2,147,483,648 (-231)2,147,483,647 (231 - 1)
Long64-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

浮点数类型

和其他语言差不多,就是处理小数的, 可承受范围不一样

类型大小(比特数)有效数字比特数指数比特数十进制位数
Float322486-7
Double64531115-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开头

数字类型的互相转换

不同类型的数字不能直接赋值,需要转换 调用数字的方法,把数字转换为其他类型

  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

ref

https://book.kotlincn.net/text/numbers.html