跳到主要内容

整型

整型

有符号整数和无符号整数类型表

类型位宽 (n)表示范围最小值表示(补码)最大正数表示(原码)备注
int88 位(2)7(-2)^72712^7 - 110000000 = -12801111111 = 127有符号 8 位整数
int1616 位(2)15(-2)^{15}21512^{15} - 11000000000000000 = -32,7680111111111111111 = 32,767有符号 16 位整数
int3232 位(2)31(-2)^{31}23112^{31} - 110000000...0 = -2,147,483,64801111111...1 = 2,147,483,647有符号 32 位整数
int6464 位(2)63(-2)^{63}26312^{63} - 110000000...0 = -9,223,372,036,854,775,80801111111...1 = 9,223,372,036,854,775,807有符号 64 位整数
uint88 位002812^8 - 100000000 = 011111111 = 255无符号 8 位整数
uint1616 位0021612^{16} - 100000000...0 = 011111111...1 = 65,535无符号 16 位整数
uint3232 位0023212^{32} - 100000000...0 = 011111111...1 = 4,294,967,295无符号 32 位整数
uint6464 位0026412^{64} - 100000000...0 = 011111111...1 = 18,446,744,073,709,551,615无符号 64 位整数

如下代码可输出有符号和无符号整数范围

package main

import (
"fmt"
"math"
)

func main() {
fmt.Println("有符号整数范围:")
fmt.Printf("int8: [%d, %d]\n", math.MinInt8, math.MaxInt8)
fmt.Printf("int16: [%d, %d]\n", math.MinInt16, math.MaxInt16)
fmt.Printf("int32: [%d, %d]\n", math.MinInt32, math.MaxInt32)
fmt.Printf("int64: [%d, %d]\n", math.MinInt64, math.MaxInt64)

fmt.Println("\n无符号整数范围:")
fmt.Printf("uint8: [%d, %d]\n", 0, math.MaxUint8)
fmt.Printf("uint16: [%d, %d]\n", 0, math.MaxUint16)
fmt.Printf("uint32: [%d, %d]\n", 0, math.MaxUint32)

// 无符号最大值 uint64 需显式转换为 uint64 类型
const MaxUint64 = uint64(1<<64 - 1)
fmt.Printf("uint64: [%d, %d]\n", 0, MaxUint64)
}

输出

有符号整数范围:
int8: [-128, 127]
int16: [-32768, 32767]
int32: [-2147483648, 2147483647]
int64: [-9223372036854775808, 9223372036854775807]

无符号整数范围:
uint8: [0, 255]
uint16: [0, 65535]
uint32: [0, 4294967295]
uint64: [0, 18446744073709551615]

有符号整数

package main

import "fmt"

func main() {
// 有符号整数
var i8 int8 = 127 // -128 到 127
var i16 int16 = 32767 // -32768 到 32767
var i32 int32 = 2147483647 // -2147483648 到 2147483647
var i64 int64 = 9223372036854775807 // -9223372036854775808 到 9223372036854775807
var i int = 42 // 32位或64位(取决于系统)

_ = i // 使用 _ 忽略未使用的变量

// byte 是 uint8 的别名
var b byte = 255

// rune 是 int32 的别名
var r rune = '牛' // Unicode字符 只能为单个字符

fmt.Printf("有符号整数类型示例:\n")
fmt.Printf("int8: %d\n", i8)
fmt.Printf("int16: %d\n", i16)
fmt.Printf("int32: %d\n", i32)
fmt.Printf("int64: %d\n", i64)
fmt.Printf("byte: %d\n", b)
fmt.Printf("rune: %c\n", r)
}

输出

有符号整数类型示例:
int8: 127
int16: 32767
int32: 2147483647
int64: 9223372036854775807
byte: 255
rune: 牛

无符号整数

package main

import "fmt"

func main() {
// 无符号整数
var ui8 uint8 = 255 // 0 到 255
var ui16 uint16 = 65535 // 0 到 65535
var ui32 uint32 = 4294967295 // 0 到 4294967295
var ui64 uint64 = 18446744073709551615 // 0 到 18446744073709551615
var ui uint = 42 // 32位或64位(取决于系统)

_ = ui // 使用 _ 忽略未使用的变量

// byte 是 uint8 的别名
var b byte = 255

// rune 是 int32 的别名
var r rune = '牛' // Unicode字符 只能为单个字符

fmt.Printf("无符号整数类型示例:\n")
fmt.Printf("ui8: %d\n", ui8)
fmt.Printf("ui16: %d\n", ui16)
fmt.Printf("ui32: %d\n", ui32)
fmt.Printf("ui64: %d\n", ui64)
fmt.Printf("byte: %d\n", b)
fmt.Printf("rune: %c\n", r)
}

输出

无符号整数类型示例:
ui8: 255
ui16: 65535
ui32: 4294967295
ui64: 18446744073709551615
byte: 255
rune: 牛
Right Bottom Gif
Right Top GIF