零基础 go - 06(基本数据类型 - 整型)

2 阅读5分钟

用于存放整数值,分为有符号整型和无符号整型两大类。

一、Go 语言中的整型有以下几种:

  • 有符号: int、int8、int16、int32、int64
  • 无符号版本 uint、uint8、uint16、uint32、uint64,
  • byte: uint8 的别名,表示一个字节,占用1个字节。当存储字符时可选择此类型
  • rune: int32 的别名,表示一个 Unicode 码点。和int32一样,占用4个字节,可以表示所有 Unicode 字符

二、整型的默认类型

  • 整型的默认类型是 int,大小取决于平台(32 位平台为 32 位,64 位平台为 64 位)。

三、整型的表示方式

整型可以使用十进制、二进制、八进制和十六进制表示

  • 二进制:以 0b 或 0B 开头,例如:0b11111111(二进制)、0B11111111(二进制)。
  • 八进制:以 0o 或 0O 开头,例如:0o377(八进制)、0O377(八进制)。
  • 十六进制:以 0x 或 0X 开头,例如:0xFF(十六进制)
  • 十进制:例如:255(十进制)

四、整型的零值

  • 整型的零值为 0。

五、获取整型的字节数和类型

  • 使用 fmt.Printf() 函数配合 %d 格式化动词来获取变量占用的字节数
  • 使用 fmt.Printf() 函数配合 %T 格式化动词来获取变量的类型。

六、整型的类型、数值范围、占用存储空间如下:

  • int8: -128 到 127 (占用1个字节)
  • uint8: 0 到 255 (占用1个字节)
  • int16: -32768 到 32767 (占用2个字节)
  • uint16: 0 到 65535 (占用2个字节)
  • int32: -2147483648 到 2147483647 (占用4个字节)
  • uint32: 0 到 4294967295 (占用4个字节)
  • int64: -9223372036854775808 到 9223372036854775807 (占用8个字节)
  • uint64: 0 到 18446744073709551615 (占用8个字节)
  • int: 根据平台不同,可能是 int32 或 int64,32位系统占用4个字节,64位系统占用8个字节
  • uint: 根据平台不同,可能是 uint32 或 uint64,32位系统占用4个字节,64位系统占用8个字节
  • rune: int32 的别名,表示一个 Unicode 码点。和int32一样,占用4个字节,可以表示所有 Unicode 字符
  • byte: uint8 的别名,表示一个字节,占用1个字节。当存储字符时可选择此类型

七、整型的使用细节:

  • 整数类型分为有符号和无符号,int uint的大小和系统有关
  • 整型变量的默认类型为 int,浮点型变量默认类型为 float64
  • 整型变量的零值为 0,浮点型的零值为 0.0,布尔型的零值为 false,字符串的零值为 ""
  • 可以使用fmt.Printf()函数配合%T格式化动词来获取变量的类型,使用fmt.Printf()函数配合%d格式化动词来获取变量占用的字节数
  • 程序中整型变量在使用时,遵循保小不保大的原则,尽量使用占用空间较小的类型来存储数据,以节省内存和提高性能
  • bit 是计算机的最小存储单位。byte是计算机的基本存储单位,1 byte = 8 bit。整型的大小通常以 byte 为单位来描述,例如 int32 占用 4 byte,即 32 bit。
  • 整型可以进行算术运算、比较运算和位运算。
  • 整型之间可以进行类型转换,但需要显式转换,例如:var i int = 100; var f float64 = float64(i)。
  • 整型的溢出行为:当一个整型变量的值超过其类型的最大值或最小值时,会发生溢出,结果会回绕到该类型的最小值或最大值。例如:var i int8 = 127; i++ 后 i 的值将变为 -128。
package main

import (
    "fmt"
    "unsafe"
)

func main() {
    // 1、定义一个整型变量
    var i int = 100
    fmt.Printf("i 的类型是 %T\n", i)
    fmt.Printf("i 占用的字节数是 %d\n", unsafe.Sizeof(i))
  

    // 2、如果定义的变量类型是 int8,且赋值超过了 int8 的范围,就会发生溢出
    // var i8 int8 = 888 // int8 的范围是 -128 到 127,赋值 888 会发生溢出
    // fmt.Printf("i8 的类型是%T\n", i8)
    // fmt.Printf("i8 占用的字节数为%d\n", unsafe.Sizeof(i8))


    // 3、整数变量的默认类型是 int
    var n1 = 11

    fmt.Printf("n1 的类型是 %T\n", n1) // n1 的类型是 int

    fmt.Printf("n1 占用的字节数是%d\n", unsafe.Sizeof(n1)) // n1 占用的字节数是 8(在 64 位系统上)

    // 4、整数的表示方式:十进制、二进制、八进制、十六进制
    var dec int = 255 // 十进制
    var bin int = 0b11111111 // 二进制
    var oct int = 0o377 // 八进制
    var hex int = 0xFF // 十六进制
    fmt.Println("十进制 dec =", dec)
    fmt.Println("二进制 bin =", bin)
    fmt.Println("八进制 oct =", oct)
    fmt.Println("十六进制 hex =", hex)

    // 5、整型的零值为 0
    var n2 int
    fmt.Println("整型 n2 =", n2) // 整型 n2 = 0


    // 6、整型变量在使用时,遵循保小不保大的原则,尽量使用占用空间较小的类型来存储数据,以节省内存和提高性能
    var age uint8 = 30 // 使用 uint8 存储年龄,节省内存
    fmt.Printf("age 的类型是 %T\n", age)
    fmt.Printf("age 占用的字节数是 %d\n", unsafe.Sizeof(age))
}