zhcn 编程语言 Golang 非公開: Go语言数据类型转换

Go语言数据类型转换

如果必要且可行,您可以将一种类型的值转换为另一种类型的值。 Go 语言没有隐式转换,因此所有转换都必须显式声明。

valueOfTypeB = typeB(valueOfTypeA)

B型值=B型(A型值)

例子:

a := 5.0
b := int(a)

只有定义良好,类型转换才会成功,例如从取值范围较小的类型转换为取值范围较大的类型(int16 到 int32)。从取值范围较大的类型转换为取值范围较小的类型(int32 转换为 int16,或 float32 转换为 int)时,会存在精度损失(截断)。

只有相同基类型的变量才能相互转换(例如,将 int16 类型转换为 int32 类型)。如果将不同基类型的变量相互转换(例如,将 bool 转换为 int),则会出现编译错误。类型):

 package main

import (
     "fmt"
     "math"
)

func main() {

     //各値の範囲を出力します
     fmt.Println("int8 range:", math.MinInt8、math.MaxInt8)
     fmt.Println("int16 range:", math.MinInt16、math.MaxInt16)
     fmt.Println("int32 range:", math.MinInt32、math.MaxInt32)
     fmt.Println("int64 range:", math.MinInt64、math.MaxInt64)

     //32ビット整数値を初期化します
     var a int32 = 1047483647
     //変数の16進形式と10進値を出力します
     fmt.Printf("int32: 0x%x %d\n", a、a)

     // a変数の値を16進数に変換して、値が切り捨てられる
     b:= int16(a)
     //変数の16進形式と10進値を出力します
     fmt.Printf("int16: 0x%x %d\n", b、b)

     //定数をfloat32型として保存します
     var c float32 = math.Pi
     // int型に変換し、浮動小数点が失われます
     fmt.Println(int(c))
} 

代码说明如下:

  • 第 11-14 行打印一些常见整数类型的值范围。
  • 第 17 行声明并初始化了一个 int32 类型的变量 a。
  • 第 19 行使用 fmt.Printf 的%x动词以十六进制格式打印值,打印转换前 a 的 32 位值。
  • 第 22 行将 a 的值从 int16 类型(即 32 位有符号整数)转换为 16 位有符号整数。但是,由于 int16 类型的值范围比 int32 类型更窄,因此值变为Masu。截断(精度损失)。
  • 第 24 行打印变量的转换值,即 b 的值。这也以十六进制和十进制输出。
  • 在第 27 行中,math.Pi 是 math 包中的常量。默认情况下它没有类型,并且根据引用的实际类型自动推断。这里,math.Pi被赋值给变量c,所以它的类型是float32。
  • 第29行将float32转换为int类型并输出。

这是代码输出:

int8 range: -128 127
int16 range: -32768 32767
int32 range: -2147483648 2147483647
int64 range: -9223372036854775808 9223372036854775807
int32: 0x3e6f54ff 1047483647
int16: 0x54ff 21759
3

根据输出结果,16位有符号整数的范围是-32768到32767,但是变量a的值1047483647不在这个范围内。 1047483647对应的十六进制值为0x3e6f54ff,但转换为int16后长度减半,即十六进制值减半为0x54ff,十进制值为21759。

将浮点数转换为整数会删除小数部分,仅保留整数部分。

通俗易懂的《Go语言数据类型转换》讲解!您必须观看的 2 个最佳视频

【Go言語 超入門コース】06.変数 |変数は、例えるなら「箱」のこと。箱にデータを入れておくことができます【プログラミング初心者向け入門講座】
https://www.youtube.com/watch?v=yYpMaSHiDpk&pp=ygUkIEdv6KiA6Kqe44OH44O844K_44Gu5Z6L5aSJ5o-bJmhsPUpB
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
https://www.youtube.com/watch?v=kPXfMFJ0oIE&pp=ygUkIEdv6KiA6Kqe44OH44O844K_44Gu5Z6L5aSJ5o-bJmhsPUpB
如果必要且可行,您可以将一种类型的值转换为另一种类型的值。 Go 语言没有隐式转换,因此所有转换都必须显式声明。

valueOfTypeB = typeB(valueOfTypeA)

B型值=B型(A型值)

例子:

a := 5.0
b := int(a)

只有定义良好,类型转换才会成功,例如从取值范围较小的类型转换为取值范围较大的类型(int16 到 int32)。从取值范围较大的类型转换为取值范围较小的类型(int32 转换为 int16,或 float32 转换为 int)时,会存在精度损失(截断)。

只有相同基类型的变量才能相互转换(例如,将 int16 类型转换为 int32 类型)。如果将不同基类型的变量相互转换(例如,将 bool 转换为 int),则会出现编译错误。类型):

 package main

import (
     "fmt"
     "math"
)

func main() {

     //各値の範囲を出力します
     fmt.Println("int8 range:", math.MinInt8、math.MaxInt8)
     fmt.Println("int16 range:", math.MinInt16、math.MaxInt16)
     fmt.Println("int32 range:", math.MinInt32、math.MaxInt32)
     fmt.Println("int64 range:", math.MinInt64、math.MaxInt64)

     //32ビット整数値を初期化します
     var a int32 = 1047483647
     //変数の16進形式と10進値を出力します
     fmt.Printf("int32: 0x%x %d\n", a、a)

     // a変数の値を16進数に変換して、値が切り捨てられる
     b:= int16(a)
     //変数の16進形式と10進値を出力します
     fmt.Printf("int16: 0x%x %d\n", b、b)

     //定数をfloat32型として保存します
     var c float32 = math.Pi
     // int型に変換し、浮動小数点が失われます
     fmt.Println(int(c))
} 

代码说明如下:

  • 第 11-14 行打印一些常见整数类型的值范围。
  • 第 17 行声明并初始化了一个 int32 类型的变量 a。
  • 第 19 行使用 fmt.Printf 的%x动词以十六进制格式打印值,打印转换前 a 的 32 位值。
  • 第 22 行将 a 的值从 int16 类型(即 32 位有符号整数)转换为 16 位有符号整数。但是,由于 int16 类型的值范围比 int32 类型更窄,因此值变为Masu。截断(精度损失)。
  • 第 24 行打印变量的转换值,即 b 的值。这也以十六进制和十进制输出。
  • 在第 27 行中,math.Pi 是 math 包中的常量。默认情况下它没有类型,并且根据引用的实际类型自动推断。这里,math.Pi被赋值给变量c,所以它的类型是float32。
  • 第29行将float32转换为int类型并输出。

这是代码输出:

int8 range: -128 127
int16 range: -32768 32767
int32 range: -2147483648 2147483647
int64 range: -9223372036854775808 9223372036854775807
int32: 0x3e6f54ff 1047483647
int16: 0x54ff 21759
3

根据输出结果,16位有符号整数的范围是-32768到32767,但是变量a的值1047483647不在这个范围内。 1047483647对应的十六进制值为0x3e6f54ff,但转换为int16后长度减半,即十六进制值减半为0x54ff,十进制值为21759。

将浮点数转换为整数会删除小数部分,仅保留整数部分。

通俗易懂的《Go语言数据类型转换》讲解!您必须观看的 2 个最佳视频

【Go言語 超入門コース】06.変数 |変数は、例えるなら「箱」のこと。箱にデータを入れておくことができます【プログラミング初心者向け入門講座】
https://www.youtube.com/watch?v=yYpMaSHiDpk&pp=ygUkIEdv6KiA6Kqe44OH44O844K_44Gu5Z6L5aSJ5o-bJmhsPUpB
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
https://www.youtube.com/watch?v=kPXfMFJ0oIE&pp=ygUkIEdv6KiA6Kqe44OH44O844K_44Gu5Z6L5aSJ5o-bJmhsPUpB