介绍
整形是所有编程语言里面的基础数据类型,在go
语言当中,同时支持int
和uint
两种类型。但是具体的长度还要取决于不同的编译器实现。go
里面同样有直接定义好位数的类型。
全部的类型如下:
类型 | 长度 | 值范围 |
---|---|---|
int8 | 1 | -128~127 |
uint8(即byte) | 1 | 0~255 |
int16 | 2 | 32 768 ~ 32 767 |
uint16 | 2 | 0 ~ 65 535 |
int32 | 4 | 2 147 483 648 ~ 2 147 483 647 |
uint32 | 4 | 0 ~ 4 294 967 295 |
int64 | 8 | 9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
uint64 | 8 | 0 ~ 18 446 744 073 709 551 615 |
int | 平台相关 | 平台相关 |
uint | 平台相关 | 平台相关 |
uintptr | 同指针 | 在32位平台下为4字节,64位平台下为8字节 |
类型转换
在go
语言当中,类型的变量之间不允许互相赋值或操作,否则会引起编译错误。比如,int
和int32
在go
语言当中被认为是两种不同的类型,编译器并不会帮你做自动类型转换。例如:
var a int32
b := 32
a = b // cannot use b (type int) as type int32 in assignment
而解决这种错误,我们可以采用强制类型转换。
var a int32
b := 32
a = int32(b)
尽管int
的长度是32 bit
, 但int
与 int32
并不可以互用。
同时,我们在做强制类型转换的时候,需要小心数据长度被截断而损失数据精度,例如将浮点数转为整数,同时也可能产生值溢出的问题。
数值运算
go语言支持+
、-
、*
、/
和%
几种常规的运算符。
比较运算符
go
语言支持的比较运算符有:>
,<
,==
,>=
,<=
和!=
。
需要注意的是,两个不同类型的整数不能直接比较,比如int8类型的数和int类型的数不能直接比较,但
各种类型的整型变量都可以直接与字面常量(literal)进行比较,比如:
var i int32
var j int64
i, j = 1, 2
if i == j { // 编译错误
fmt.Println("i and j are equal.")
}
if i == 1 || j == 2 { // 编译通过
fmt.Println("i and j are equal.")
}
位运算
运算 | 含义 | 样例 |
---|---|---|
x << y | 左移 | 124 << 2 // 结果为496 |
x >> y | 右移 | 124 >> 2 // 结果为31 |
x ^ y | 异或 | 124 ^ 2 // 结果为126 |
x & y | 与 | 124 & 2 // 结果为0 |
x|y | 或 | 124|2 // 结果为126 |
^x | 取反 | ^2 // 结果为3 |