3.1 整型
类型
有符号:int8、int16、int32、int64;无符号:uint8、uint16、uint32、uint64。int 和 uint 大小随平台(32 或 64 bit)。rune 等价 int32(Unicode 码点),byte 等价 uint8(原始数据),uintptr 用于存放指针。
不同整数类型间不能直接运算,需显式转换:int(apples) + int(oranges)。
运算符(优先级从高到低)
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||
% 取模结果符号与被除数一致。整数 / 向零截断。溢出时高位丢弃。
位运算
&(AND)、|(OR)、^(XOR / 一元取反)、&^(AND NOT,按位清零)、<<(左移)、>>(右移)。
x := uint8(1<<1 | 1<<5) // 00100010
y := uint8(1<<1 | 1<<2) // 00000110
fmt.Printf("%08b\n", x&y) // 00000010 交集
fmt.Printf("%08b\n", x|y) // 00100110 并集
fmt.Printf("%08b\n", x^y) // 00100100 对称差
fmt.Printf("%08b\n", x&^y) // 00100000 差集
进制与格式化
八进制 0666,十六进制 0xdeadbeef。%d 十进制、%o 八进制、%x 十六进制、%c 字符、%q 带引号字符。
o := 0666
fmt.Printf("%d %[1]o %#[1]o\n", o) // 438 666 0666
使用建议
即使值不会为负,一般也优先用 int 而非 uint,避免 i >= 0 永真导致的死循环。uint 仅在位运算、哈希等场景使用。