整数
Go 的整数类型有哪些?
- 位宽: 决定能表示的整数范围;有符号类型可表示负数,无符号类型从零开始,
int与uint的宽度由平台决定;
| 类型 | 描述 |
|---|---|
| int | 平台相关有符号整数 |
| uint | 平台相关无符号整数 |
| int8 / int16 / int32 / int64 | 固定位宽有符号整数 |
| uint8 / uint16 / uint32 / uint64 | 固定位宽无符号整数 |
| byte | uint8 别名 |
| rune | int32 别名 |
| uintptr | 可保存指针位模式的整数 |
整数字面量有哪几种写法?
func main() {
decimal := 42 // 十进制
binary := 0b101010 // 二进制
octal := 0o52 // 八进制
hex := 0x2a // 十六进制
readable := 1_000_000 // 下划线仅提升可读性
println(decimal, binary, octal, hex, readable)
}
整数溢出会怎样, uint8 溢出后如何回绕?
- 运行时溢出: 无符号运算按位宽回绕;有符号运算的溢出结果也由表示方式确定,不会自动报告业务错误;
- 常量越界: 编译器会拒绝无法由目标类型表示的常量,不能把运行时回绕规则用于解释
var n uint8 = 256;
package main
import "fmt"
func main() {
var n uint8 = 255 // uint8 范围为 0..255
n++ // 溢出后回绕为 0
fmt.Println(n)
}