文章目录
int 是有符号数
uint 是无符号数
所以 int8 的 范围是 -128 到 127
uint8 的范围是 0 到 255
同样的二进制 1000-0000 如果用 uint8 解释则为 255,但如果用 int8 解释则为 -128
同样的二进制 0111-1111 如果用 uint8 解释则为 127,但如果用 int8 解释则也为 127
核心是,如果是有符号数(如 int8),则最高位为符号位。
uint 示例如下:
func main() {
a := uint8(1)
for i := 0; i < 19; i++ {
var t uint8 = a << i
fmt.Printf("%10d %10d %10b\n", i, t, t)
}
}
// go run
0 1 1
1 2 10
2 4 100
3 8 1000
4 16 10000
5 32 100000
6 64 1000000
7 128 10000000
8 0 0
9 0 0
int 示例如下:
func main() {
a := int8(1)
for i := 0; i < 10; i++ {
var t int8 = a << i
fmt.Printf("%10d %10d %10b\n", i, t, t)
}
}
// go run
0 1 1
1 2 10
2 4 100
3 8 1000
4 16 10000
5 32 100000
6 64 1000000
7 -128 -10000000
8 0 0
9 0 0