数字字面量
Nim 中的数字字面量和大多数其他语言一样。为了增加可读性,可以在数字字面量中插入下划线(注意,不可以连续插入下划线),比如:
echo 1_0000 == 10000 # 输出 trueecho 1_000_0 == 10000 # 输出 trueecho 1_000_____0 == 10000 # 编译时错误
带有 e 或者 E 的数字表示一个使用科学计数法的浮点数。比如 1.0e9 表示 。
数字的十六进制表示以 0x 开头;二进制表示以 0b 开头;八进制表示以 0o 开头。
数字类型
数字类型有两种:整数和浮点数。
整数
整数类型有有符号整数 int、int8、int16、int32、int64 和无符号整数 uint、uint8、uint16、uint32、uint64。
在声明一个整数变量时,如果不指定类型,则默认是 int。比如:
var a = 1echo typeof a # 输出 intvar b: int64 = 2echo typeof b # 输出 int64
还可以使用类型后缀来指定整数类型。比如:
var c = 3'i8echo typeof c # 输出 int8var d = 4'uecho typeof d # 输出 uintvar e = 5'u16echo typeof e # 输出 uint16
int 变量占用内存的大小和指针一样。
整数运算
算术运算
整数支持基本的算数运算:
echo 3 + 4 # 7echo 3 - 4 # -1echo 3 * 4 # 12echo 3 / 4 # 0.75echo 3 div 4 # 0echo 7 div 4 # 1echo 4 mod 3 # 1echo -1 mod 3 # -1
比较运算
整数支持比较运算符:
echo 3 >= 4 # falseecho 3 > 4 # falseecho 3 == 4 # falseecho 3 < 4 # trueecho 3 <= 4 # trueecho 3 != 4 # true
位运算
整数支持位运算。其中,
and表示按位与or表示按位或xor表示按位异或not表示按位取反(非)shl表示向左位移(shift left)shr表示向右位移(shift right)
二进制运算在操作整数时,总是把整数看做无符号整数。
echo 5 and 6 # 101 and 110 => 100 => 4echo 5 or 6 # 101 or 110 => 111 => 7echo 5 xor 6 # 101 xor 110 => 011 => 3echo not 15'u8 # not 00001111 => 11110000 => 11111111 - 00001111 => 255 - 15 => 240echo 1 shl 2 # 001 << 2 => 100 => 4echo 4 shr 2 # 100 >> 2 => 001 => 1
浮点数
浮点数类型有 float、float32 和 float64。
- 默认使用
float(官方文档说默认是float,但是实际上执行代码时,发现默认是float64) - 在当前实现中,
float总是 64 位(float64) - 浮点数字面量也支持类型后缀
比如:
var w = 1.414echo typeof w # 输出 float64var x: float = 1.732echo typeof x # 输出 floatvar y: float64 = 2.17828echo typeof y # 输出 float64var z = 3.14159'f32echo typeof z # 输出 float32
浮点数支持这些运算符 +、-、*、/、<、<=、==、!=、>、>=,例子就不举了。
需要注意的是,在浮点数和整数之间不可以直接进行运算,要么把浮点数转成整数(toInt),要么把整数转成浮点数(toFloat)。比如下例中,第四行代码会抛出编译时错误:
var x1: int = 1var x2: float = 2 + toFloat(x1)var x3: float = 2 + x1.toFloat()var x4: float = 2 + x1 # 这一行代码会在编译时抛出错误
