6 Go 整型数据类型使用

Go语言的整型数据类型包含以下几种:

有符号:int,int8,int16,int32,int64,rune

无符号:uint,uint8,uint16,uint32,uint64,byte

 

详细情况如下:

数据类型 有无符号 占用存储 取值范围
int8 有符号   占1字节,8位 取值范围:(-2的7次方)-128~127(2的7次方-1)
int16 有符号 占2字节,16位 取值范围:(-2的15次方)-32768~32767(2的15次方-1)
int32 有符号 占4字节,32位 取值范围:(-2的31次方)-2147483648~2147483647(2的31次方-1)
int64
有符号 占8字节,64位 取值范围:(-2的63次方)-9223372036854775808~9223372036854775807(2的63次方-1)
uint8 无符号 占1字节,8位 取值范围:0~255(2的8次方-1)
uint16 无符号 占2字节,16位 取值范围:0~65535(2的16次方*-1)
uint32 无符号 占4字节,32位 取值范围:0~4294967295(2的32次方-1)
uint64 无符号 占8字节,64位 取值范围:0~18446744073709551615(2的64次方-1)
int 有符号

32位系统占4字节,32位

64位系统占8字节,64位

GO语言整型默认数据类型

取值范围:(-2的31次方)-2147483648~2147483647(2的31次方-1)

取值范围:(-2的63次方)-9223372036854775808~9223372036854775807(2的63次方-1)

uint 无符号

32位系统占4字节,32位

64位系统占8字节,64位

取值范围:0~4294967295(2的32次方-1)

取值范围:0~18446744073709551615(2的64次方-1)

rune 有符号 占4字节,32位

取值范围:(-2的31次方)-2147483648~2147483647(2的31次方-1)

等价int32,表示一个Uincode值

byte 无符号 占1字节,8位

取值范围:0~255(2的8次方-1)

等价uint8,存储非汉字字符时使用byte

 

 1 package main
 2 
 3 // 一次引用多个包
 4 import (
 5     "fmt"
 6     "unsafe"
 7 )
 8 
 9 func main() {
10     // Go语言的整型如下:
11 
12     // 有符号的整型
13     // int8        占1字节,8位    有符号    取值范围:(-2的7次方)-128~127(2的7次方-1)
14     // int16    占2字节,16位    有符号    取值范围:(-2的15次方)-32768~32767(2的15次方-1)
15     // int32    占4字节,32位    有符号    取值范围:(-2的31次方)-2147483648~2147483647(2的31次方-1)
16     // int64    占8字节,64位    有符号    取值范围:(-2的63次方)-9223372036854775808~9223372036854775807(2的63次方-1)
17     var i8 int8 = -128
18     // var i8 int8 = -129 //  cannot use -129 (untyped int constant) as int8 value in variable declaration (overflows)
19     // var i8 int8 = 128 // cannot use 128 (untyped int constant) as int8 value in variable declaration (overflows)
20     var i16 int16 = -32768
21     // var i16 int16 = -32769 // cannot use -32769 (untyped int constant) as int16 value in variable declaration (overflows)
22     var i32 int32 = 2147483647
23     // var i32 int32 = 2147483648 // cannot use 2147483648 (untyped int constant) as int32 value in variable declaration (overflows)
24     var i64 int64 = 9223372036854775807
25     // var i64 int64 = 9223372036854775808 // cannot use 9223372036854775808 (untyped int constant) as int64 value in variable declaration (overflows)
26     fmt.Println("i8=", i8)     // i8= -127
27     fmt.Println("i16=", i16) // i16= 128
28     fmt.Println("i32=", i32) // i32= 2147483647
29     fmt.Println("i64=", i64) // i64= 2147483648
30     fmt.Println("")
31 
32     // 无符号的整型
33     // uint8    占1字节,8位    无符号    取值范围:0~255(2的8次方-1)
34     // uint16    占2字节,16位    无符号    取值范围:0~65535(2的16次方*-1)
35     // uint32    占4字节,32位    无符号    取值范围:0~4294967295(2的32次方-1)
36     // uint64    占8字节,64位    无符号    取值范围:0~18446744073709551615(2的64次方-1)
37     var ui8 uint8 = 255
38     // var ui8 uint8 = 256 // cannot use 256 (untyped int constant) as uint8 value in variable declaration (overflows)
39     var ui16 uint16 = 65535
40     // var ui16 uint16 = 65536 // cannot use 65536 (untyped int constant) as uint16 value in variable declaration (overflows)
41     var ui32 uint32 = 4294967295
42     // var ui32 uint32 = 4294967296 // cannot use 4294967296 (untyped int constant) as uint32 value in variable declaration (overflows)
43     var ui64 uint64 = 18446744073709551615
44     // var ui64 uint64 = 18446744073709551616 // cannot use 18446744073709551616 (untyped int constant) as uint64 value in variable declaration (overflows)
45     fmt.Println("ui8=", ui8)     // ui8= 255
46     fmt.Println("ui16=", ui16) // ui16= 65535
47     fmt.Println("ui32=", ui32) // ui32= 4294967295
48     fmt.Println("ui64=", ui64) // ui64= 18446744073709551615
49     fmt.Println("")
50 
51     // 其他常用整型int    uint    rune    byte
52     // int    有符号    32位系统4字节,32位        取值范围:(-2的31次方)-2147483648~2147483647(2的31次方-1)
53     //                 64位系统8字节,64位        取值范围:(-2的63次方)-9223372036854775808~9223372036854775807(2的63次方-1)
54     // uint    无符号    32位系统4字节,32位        取值范围:0~4294967295(2的32次方-1)
55     //                 64位系统8字节,64位        取值范围:0~18446744073709551615(2的64次方-1)
56     // rune    有符号    4字节,32位                取值范围:(-2的31次方)-2147483648~2147483647(2的31次方-1),等价int32,表示一个Uincode值
57     // byte    无符号    1字节,8位                取值范围:0~255(2的8次方-1),等价uint8,存储非汉字字符时使用byte
58     var i int = 9223372036854775807
59     // var i int = 9223372036854775808 // cannot use 9223372036854775808 (untyped int constant) as int value in variable declaration (overflows)
60     var ui uint = 18446744073709551615
61     // var ui uint = 18446744073709551616 // cannot use 18446744073709551616 (untyped int constant) as uint value in variable declaration (overflows)
62     var ru rune = 2147483647
63     // var ru rune = 2147483648 // cannot use 2147483648 (untyped int constant) as rune value in variable declaration (overflows)
64     var b byte = 255
65     // var b byte = 256 // cannot use 256 (untyped int constant) as byte value in variable declaration (overflows)
66     fmt.Println("i=", i) // i= 9223372036854775807
67     fmt.Println("ui=", ui) // ui= 18446744073709551615
68     fmt.Println("ru=", ru) // ru= 2147483647
69     fmt.Println("b=", b) // b= 255
70     fmt.Println("")
71 
72     // Go语言的整型注意事项:
73     // 1 整型分有符号和无符号两种,其中int和uint的存储大小跟系统有关;
74     // 2 整型的默认类型为int
75     // 3 Go语言使用整型类型时,在满足使用范围的前提下尽量选择占用存储空间更小的数据类型;
76     // 4 bit是计算机中最小的存储单位,byte是计算机中基本存储单元,1 byte = 8 bit;
77     // 5 Go语言如何查看变量的字节大小和数据类型,如下
78     var unknownInt int64 = 123
79     fmt.Printf("变量unknownInt占用%d个字节,类型为%T", unsafe.Sizeof(unknownInt), unknownInt)
80 }

 

 

 

Go语言整型注意事项:

1 整型分有符号和无符号两种,其中int和uint的存储大小跟系统有关;

2 整型的默认类型为int

3 Go语言使用整型类型时,在满足使用范围的前提下尽量选择占用存储空间更小的数据类型;

4 bit是计算机中最小的存储单位,byte是计算机中基本存储单元,1 byte = 8 bit;

5 Go语言如何查看变量的字节大小和数据类型,如下

var unknownInt int64 = 123
fmt.Printf("变量unknownInt占用%d个字节,类型为%T", unsafe.Sizeof(unknownInt), unknownInt)

变量unknownInt占用8个字节,类型为int64

 

posted @ 2022-05-03 10:21  风铃如沧海  阅读(509)  评论(0编辑  收藏  举报