06:整数和浮点数
Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。本篇我们主要了解下基础类型的数字类型。
整型
Go语言同时提供了有符号和无符号类型的整数。
- 有符号整数
- 无符号整数
- 与CPU平台机器字大小有关的有符号和无符号整数int和uint
这两种类型都有同样的大小,32或64bit。使用的操作系统不同其在不同的硬件平台上的大小是会有差异的。 - rune
rune类型是和int32等价的类型 - byte
byte是uint8类型的等价类型
来看个例子,简单打印下一些数据类型的范围:
// 有符号整
fmt.Println("int8:", math.MinInt8, "-", math.MaxInt8)
fmt.Println("int16:", math.MinInt16, "-", math.MaxInt16)
fmt.Println("int32:", math.MinInt32, "-", math.MaxInt32)
fmt.Println("int64:", math.MinInt64, "-", math.MaxInt64)
// 无符号整数
fmt.Println("MaxUint8:", math.MaxUint8)
fmt.Println("MaxUint16:", math.MaxUint16)
fmt.Println("MaxUint32:", math.MaxUint32)
// 注意这里使用Println的时候默认为int值,MaxUint64是一个大小超过int的常量
// 如果不做转化那么会出现编译错误:constant 18446744073709551615 overflows int
fmt.Println("uint64:", uint64(math.MaxUint64))
//fmt.Println("uint64:", math.MaxUint64)
还有一种无符号的整数类型uintptr,没有指定具体的bit大小(一般用来存储指针),该类型只有在底层编程时才需要。
有符号整数采用2的补码形式表示,也就是最高bit位用来表示符号位,一个n-bit的有符号数的值域是从 − 2 n − 1 -2^{n-1} −2n−1到 2 n − 1 − 1 2^{n-1}-1 2n−1−1。无符号整数的所有bit位都用于表示非负数,值域是0到 2 n − 1 2^n-1 2n−1。
fmt.Printf("%b\n", -10)
fmt.Printf("%b\n", 10)
- 整数的表达方式
/* 进制数字中间可以使用下划线_进行分割,以便于阅读 二进制:以0b开头,后面接二进制数字,如ob10100、0b_01_01_00、0b_10100 八进制:以零(0) 、0o(小写字母o)、0O(大写字母O)开头,后面接八进制数字,下划线分割同二进制示例 十进制:数字 十六进制:以0x或者0X开头,下划线分割同二进制示例 */
binaryNumber := 0b10100
octalNumber := 0o24
octalNumber2 := 0o24
octalNumber3 := 024
decimalNumber := 20
hexNumber := 0x14
hexNumber2 := 0x14
浮点数
Go语言提供了两种精度的浮点数,float32和float64。
- 浮点数的表达方式
- 浮点数的存储
对于32位的浮点数来说,有效bit位只有23个,其它的bit位用于指数和符号(最高位表示符号,接着8位表示指数)
对于64位的浮点数来说,最高位表示符号,接着11位表示指数,剩下的52位就是实际的有效位数
floatVar := 72.4
floatVar2 := 1e6
floatVar3 := 1.e+0
floatVar4 := 0x2.3p+6
floatVar5 := 0x2.3p-6
复数
Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实部和虚部:
var x complex64 = complex(1, 2)
var y complex128 = complex(3, 4)
如果一个浮点数面值或一个十进制整数面值后面跟着一个i,例如3.0i或2i,它将构成一个复数的虚部,复数的实部是0.
其中一个复数常量可以加到另一个普通数值常量,所以上例中可以简写为:
x := 1 + 2i
y := 3 + 4i
运算符
对于算术运算、逻辑运算和比较运算的二元运算符,它们的优先级递减的顺序如下:
* / % << >> & &^
* - | ^
== != < <= > >=
&&
||
比较运算符
== 等于
!= 不等于
< 小于
<= 小于等于大于
= 大于等于
位运算符
& 位运算 AND
| 位运算 OR
^ 位运算 XOR
&^ 位清空 (AND NOT)
<< 左移右移
还没有评论,来说两句吧...