int
int:有符号整数类型,根据当前系统架构可能为 32 位或 64 位。
math.MinInt32 到 math.MaxInt32 或 math.MinInt64 到 math.MaxInt64。
package main
import (
"fmt"
)
func main() {
var a int = 10
var b int8
// int 转 int8
b = int8(a)
fmt.Printf("int8 value: %d\n", b)
// int8 转 int
a = int(b)
fmt.Printf("int value: %d\n", a)
}
运行结果:
int8 value: 10
int value: 10
int8
int8:有符号 8 位整数类型。
-128 到 127。
package main
import (
"fmt"
)
func main() {
var a int8 = 100
var b int16
// int8 转 int16
b = int16(a)
fmt.Printf("int16 value: %d\n", b)
// int16 转 int8
a = int8(b)
fmt.Printf("int8 value: %d\n", a)
}
运行结果:
int16 value: 100
int8 value: 100
int16
int16:有符号 16 位整数类型。
-32768 到 32767。
package main
import (
"fmt"
)
func main() {
var a int16 = 1000
var b int32
// int16 转 int32
b = int32(a)
fmt.Printf("int32 value: %d\n", b)
// int32 转 int16
a = int16(b)
fmt.Printf("int16 value: %d\n", a)
}
运行结果:
int32 value: 1000
int16 value: 1000
int 32
int32:有符号 32 位整数类型。
-2147483648 到 2147483647。
package main
import (
"fmt"
)
func main() {
var a int32 = 10000
var b int64
// int32 转 int64
b = int64(a)
fmt.Printf("int64 value: %d\n", b)
// int64 转 int32
a = int32(b)
fmt.Printf("int32 value: %d\n", a)
}
运行结果:
int64 value: 10000
int32 value: 10000
int 64
int64:有符号 64 位整数类型。
-9223372036854775808 到 9223372036854775807。
package main
import (
"fmt"
)
func main() {
var a int64 = 100000
var b int32
// int64 转 int32
b = int32(a)
fmt.Printf("int32 value: %d\n", b)
// int32 转 int64
a = int64(b)
fmt.Printf("int64 value: %d\n", a)
}
运行结果:
int32 value: 100000
int64 value: 100000
uint
uint:无符号整数类型,根据当前系统架构可能为 32 位或 64 位。
0 到 math.MaxUint32 或 0 到 math.MaxUint64。
package main
import (
"fmt"
)
func main() {
var a uint = 100
var b uint8
// uint 转 uint8
b = uint8(a)
fmt.Printf("uint8 value: %d\n", b)
// uint8 转 uint
a = uint(b)
fmt.Printf("uint value: %d\n", a)
}
运行结果:
uint8 value: 100
uint value: 100
uint 8
uint8:无符号 8 位整数类型。
0 到 255。
package main
import (
"fmt"
)
func main() {
var a uint8 = 200
var b uint16
// uint8 转 uint16
b = uint16(a)
fmt.Printf("uint16 value: %d\n", b)
// uint16 转 uint8
a = uint8(b)
fmt.Printf("uint8 value: %d\n", a)
}
运行结果:
uint16 value: 200
uint8 value: 200
uint 16
uint16:无符号 16 位整数类型。
0 到 65535。
package main
import (
"fmt"
)
func main() {
var a uint16 = 1000
var b uint32
// uint16 转 uint32
b = uint32(a)
fmt.Printf("uint32 value: %d\n", b)
// uint32 转 uint16
a = uint16(b)
fmt.Printf("uint16 value: %d\n", a)
}
运行结果:
uint32 value: 1000
uint16 value: 1000
uint 32
uint32:无符号 32 位整数类型。
0 到 4294967295。
package main
import (
"fmt"
)
func main() {
var a uint32 = 10000
var b uint64
// uint32 转 uint64
b = uint64(a)
fmt.Printf("uint64 value: %d\n", b)
// uint64 转 uint32
a = uint32(b)
fmt.Printf("uint32 value: %d\n", a)
}
运行结果:
uint64 value: 10000
uint32 value: 10000
uint 64
uint64:无符号 64 位整数类型。
package main
import (
"fmt"
)
func main() {
var a uint64 = 100000
var b uint32
// uint64 转 uint32
b = uint32(a)
fmt.Printf("uint32 value: %d\n", b)
// uint32 转 uint64
a = uint64(b)
fmt.Printf("uint64 value: %d\n", a)
}
运行结果:
uint32 value: 100000
uint64 value: 100000
uintptr
package main
import (
"fmt"
)
func main() {
var a uintptr = 123456
var b uint64
// uintptr 转 uint64
b = uint64(a)
fmt.Printf("uint64 value: %d\n", b)
// uint64 转 uintptr
a = uintptr(b)
fmt.Printf("uintptr value: %d\n", a)
}
运行结果:
uint64 value: 123456
uintptr value: 123456
uintptr 是一个无符号整数类型,用于保存指针的值。虽然在 Go 语言中可以将 uintptr 类型的值转换为 uint64 类型,但这并不意味着 uintptr 类型的值本身就是指针的值。
在 Go 语言中,uintptr 类型主要用于在指针和整数之间进行转换,但这种转换是不安全的,因为它可能导致指针的失去类型信息或者破坏指针的语义。因此,在正常的开发中,应该避免直接使用 uintptr 类型来处理指针。
package main
import (
"fmt"
"unsafe"
)
func main() {
var p *int
var ptr uintptr
var num uint64
i := 10
p = &i
// 将指针转换为 uintptr
ptr = uintptr(unsafe.Pointer(p))
fmt.Printf("uintptr value: %d\n", ptr)
// 将 uintptr 转换为 uint64
num = uint64(ptr)
fmt.Printf("uint64 value: %d\n", num)
}
运行结果:
uintptr value: 824634199880
uint64 value: 824634199880