文章目录
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 << ifmt.Printf("%10d %10d %10b\n", i, t, t)}
}// go run0 1 11 2 102 4 1003 8 10004 16 100005 32 1000006 64 10000007 128 100000008 0 09 0 0
int 示例如下:
func main() {a := int8(1)for i := 0; i < 10; i++ {var t int8 = a << ifmt.Printf("%10d %10d %10b\n", i, t, t)}
}// go run 0 1 11 2 102 4 1003 8 10004 16 100005 32 1000006 64 10000007 -128 -100000008 0 09 0 0