Go 语言系列4:整型
发布于 2021-11-18 17:06 ,所属分类:软件编程学习资料
在 Go 语言中,整型可以细分成两个种类十个类型。
int8 :表示 8 位有符号整型;其类型宽度为 8 位,即 1 字节,表示范围:-128 ~ 127 。
int16 :表示 16 位有符号整型;其类型宽度为 16 位,即 2 字节,表示范围:-32768 ~ 32767 。
int32 :表示 32 位有符号整型;其类型宽度为 32 位,即 4 字节,表示范围:-2147483648 ~ 2147483647 。
int64 :表示 64 位有符号整型;其类型宽度为 64 位,即 8 字节,表示范围:-9223372036854775808 ~ 9223372036854775807 。
int :根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。其类型宽度在 32 位系统下是 32 位,而在 64 位系统下是 64 位。表示范围:在 32 位系统下是 -2147483648 ~ 2147483647 ,而在 64 位系统是 -9223372036854775808 ~ 9223372036854775807 。
packagemain
import(
"fmt"
"math"
"unsafe"
)
funcmain(){
varnum8int8=127
varnum16int16=32767
varnum32int32=math.MaxInt32
varnum64int64=math.MaxInt64
varnumint=math.MaxInt
fmt.Printf("typeofnum8is%T,sizeofnum8is%d,num8=%d\n",
num8,unsafe.Sizeof(num8),num8)
fmt.Printf("typeofnum16is%T,sizeofnum16is%d,num16=%d\n",
num16,unsafe.Sizeof(num16),num16)
fmt.Printf("typeofnum32is%T,sizeofnum32is%d,num32=%d\n",
num32,unsafe.Sizeof(num32),num32)
fmt.Printf("typeofnum64is%T,sizeofnum64is%d,num64=%d\n",
num64,unsafe.Sizeof(num64),num64)
fmt.Printf("typeofnumis%T,sizeofnumis%d,num=%d\n",
num,unsafe.Sizeof(num),num)
}
其中,程序中的 Printf 方法,可以使用 %T 格式说明符(Format Specifier)打印出变量的类型。而 unsafe 包的 Sizeof 函数接收变量并返回它的字节大小。使用 unsafe 包可能会带来可移植性问题,这里只是作为演示使用。如果你将 num8 的值改为 128 运行后就会报错,因为 int8 类型的最大值为 127 。该程序运行后输出如下:
typeofnum8isint8,sizeofnum8is1,num8=127
typeofnum16isint16,sizeofnum16is2,num16=32767
typeofnum32isint32,sizeofnum32is4,num32=2147483647
typeofnum64isint64,sizeofnum64is8,num64=9223372036854775807
typeofnumisint,sizeofnumis8,num=9223372036854775807uint8 :表示 8 位无符号整型;其类型宽度为 8 位,即 1 字节,表示范围:0 ~ 255 。
uint16 :表示 16 位无符号整型;其类型宽度为 16 位,即 2 字节,表示范围:0 ~ 65535 。
uint32 :表示 32 位无符号整型;其类型宽度为 32 位,即 4 字节,表示范围:0 ~ 4294967295 。
uint64 :表示 64 位无符号整型;其类型宽度为 64 位,即 8 字节,表示范围:0 ~ 18446744073709551615 。
uint :根据不同的底层平台,表示 32 或 64 位无符号整型。其类型宽度在 32 位系统下是 32 位,而在 64 位系统下是 64 位。表示范围在 32 位系统下是 0 ~ 4294967295 ,而在 64 位系统是 0 ~ 18446744073709551615 。
packagemain
import(
"fmt"
"math"
"unsafe"
)
funcmain(){
varnum8uint8=128
varnum16uint16=32768
varnum32uint32=math.MaxUint32
varnum64uint64=math.MaxUint64
varnumuint=math.MaxUint
fmt.Printf("typeofnum8is%T,sizeofnum8is%d,num8=%d\n",
num8,unsafe.Sizeof(num8),num8)
fmt.Printf("typeofnum16is%T,sizeofnum16is%d,num16=%d\n",
num16,unsafe.Sizeof(num16),num16)
fmt.Printf("typeofnum32is%T,sizeofnum32is%d,num32=%d\n",
num32,unsafe.Sizeof(num32),num32)
fmt.Printf("typeofnum64is%T,sizeofnum64is%d,num64=%d\n",
num64,unsafe.Sizeof(num64),num64)
fmt.Printf("typeofnumis%T,sizeofnumis%d,num=%d\n",
num,unsafe.Sizeof(num),num)
}
该程序运行结果如下:
typeofnum8isuint8,sizeofnum8is1,num8=128
typeofnum16isuint16,sizeofnum16is2,num16=32768
typeofnum32isuint32,sizeofnum32is4,num32=4294967295
typeofnum64isuint64,sizeofnum64is8,num64=18446744073709551615
typeofnumisuint,sizeofnumis8,num=18446744073709551615
uint 无符号整型和 int 有符号整型的区别就在于一个 u ,有 u 的就表示无符号,没有 u 的就表示有符号。
接下来讲讲它们表示范围的差别,例如 int8 和 uint8 ,它们的类型宽度都为 8 位,能表示的数值个数为 ,对于无符号整数来说,表示的都是正数,所以表示范围为 0 ~ 255 ,一共 256 个数。而对于有符号整数来说,就得借一位来表示符号,所以表示范围为 -128 ~ 127 ,刚好也是 256 个数。
对于 int8 , int16 等这些类型后面有跟一个数值的类型来说,它们能表示的数值个数是固定的。而对于 int , uint 这两个没有指定其大小的类型,在 32 位系统和 64 位系统下的大小是不同的。所以,在有的时候例如在二进制传输、读写文件的结构描述(为了保持文件的结构不会受到不同编译目标平台字节长度的影响)等情况下,使用更加精确的 int32 和 int64 是更好的。
一般我们习惯使用十进制表示法,当然,有时候我们也会使用其他进制表示一个整数。在 Go 中,以 0b 或 0B 开头的数表示 二进制 ,以 0o 或 0O 开头的数表示 八进制 ,以 0x 或 0X 开头的数表示 十六进制 。
packagemain
import(
"fmt"
)
funcmain(){
varnum2int=0b1100011
varnum8int=0o143
varnum10int=99
varnum16int=0X63
fmt.Println("num2=",num2)
fmt.Println("num8=",num8)
fmt.Println("num10=",num10)
fmt.Println("num16=",num16)
}
该程序的四个数都表示十进制的 99 ,程序运行后输出如下:
num2=99
num8=99
num10=99
num16=99
当然,你也可以使用 fmt 包的格式化输出相应的进制数。
packagemain
import(
"fmt"
)
funcmain(){
varnum2int=0b1100011
varnum8int=0o143
varnum10int=99
varnum16int=0X63
fmt.Printf("2进制数num2=%b\n",num2)
fmt.Printf("8进制数num8=%o\n",num8)
fmt.Printf("10进制数num10=%d\n",num10)
fmt.Printf("16进制数num16=%x\n",num16)
}
该程序运行后输出如下:
2进制数num2=1100011
8进制数num8=143
10进制数num10=99
16进制数num16=63
参考文献:
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017.


















![[视频教程] 尚硅谷 Go语言核心编程课程](https://static.kouhao8.com/sucaidashi/xkbb/5850341684cce785a9e4415a3755d65f.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[视频教程] 尚硅谷 Go语言核心编程课程](https://static.kouhao8.com/sucaidashi/xkbb/f1d865b99f5d150a767ca3cc237e94c8.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[后端开发] Google资深工程师深度讲解Go语言](https://static.kouhao8.com/sucaidashi/xkbb/49d4b8528a407349b65b347240e23e0b.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)


![[后端开发]Go语言实战流媒体视频网站](https://static.kouhao8.com/sucaidashi/xkbb/5ad4f6e16ce35cdca524d483c3ff194b.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[人工智能] 最新编程语言 go语言下载 180多集的视频。从入门到精通](https://static.kouhao8.com/sucaidashi/xkbb/8071f94720e1e5eb8147a8bada7f1cea.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
相关资源