Go语言中的数值类型
与其它语言一样,Go语言支持整型和浮点型数值。不同的是,Go语言是强类型语言,数值运算需要在同一种类型的数值之间进行。
Go语言内置的数值类型都支持下面所列的运算:
语法 | 描述 |
---|---|
+x | x |
-x | x的负值 |
x++ | x加上常量1 |
x– | x减去常量1 |
x + y | x加上y |
x - y | x减去y |
x * y | x乘以y |
x / y | x除以y |
x += y | x = x + y |
x -= y | x = x - y |
x *=y | x = x * y |
x /=y | x = x / y |
类型转换
数值类型的变量在定义时就需要指定其类型,如果没有指定,Go会进行类型推断。常量可以与其它类型兼容,不用转换也可以进行运算。不同类型的数值运算需要先使用下面的方法进行类型转换。注意:类型转换可能会导致精度丢失。
1 | type(value) |
例如:
1 | package main |
整型
Go语言所有的整数类型如下所示:
类型 | 描述 |
---|---|
int | 32位平台等同于int32, 64位平台等同于int64 |
int8 | 有符号 8 位整型 (-128 到 127) |
int16 | 有符号 16 位整型 (-32768 到 32767) |
int32 | 有符号 32 位整型 (-2147483648 到 2147483647) |
int64 | 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
uint8 | 无符号 8 位整型 (0 到 255) |
uint16 | 无符号 16 位整型 (0 到 65535) |
uint32 | 无符号 32 位整型 (0 到 4294967295) |
uint64 | 无符号 64 位整型 (0 到 18446744073709551615) |
byte | 等同于uint8 |
rune | 等同于uint32 |
uintptr | 32位平台等同于uint32, 64位平台等同于uint64 |
只有整型数值支持的运算如下:
语法 | 描述 |
---|---|
^x | 按位取反 |
x % y | x除以y的余数 |
x & y | x按位与运算 |
x | y | x按位或运算 |
x ^ y | x异或y |
x &^ | x y按位与非运算 |
x << u | x 左移 u位 高位丢弃,低位补0 |
x >> u | x 右移 u位 低位丢弃,高位补0 |
x %= y | x = x % y |
x | = y |
x ^= y | x = x ^ y |
x &^ y | x = x & y |
x >>= u | x = x >> u |
x <<= u | x = x << u |
浮点型
IEEE浮点数的表示
IEEE浮点数标准用如下的形式表示一个浮点数:
$$ V = (-1)^s \times M \times 2^E $$
其中 s 的值可以为0或者1,用来表示浮点数的正负。M 为12或者01之间的小数值。E 为阶码,用于对浮点数加权。例如:小数 3.75 可以表示为:
$$ (-1)^0 \times 1\frac{7}{8} \times 2^1 $$
对于float32来说,其中 s 占 1 位,E 占8位,M 占剩下的23位。对于float64来说,s 占1位,E 占11位,M 占剩下的52位。
为了产生 -126 ~ 127之间的E的取值, float32中表示E的8位,作为无符号整数,需要减去一个偏置值 127. float64与之类似。
因此,Go语言中的浮点类型有两种,与之对应,即float32和float64。
由于存储浮点数的字节数有限,以及不是所有的浮点数都能用二进制精确的表示,所有有的浮点数只是一个近似值,在进行 == 与 != 比较时需要特别注意。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 三木的技术博客!
评论