golang:强制类型转换

ゝ一纸荒年。 2021-12-18 22:11 668阅读 0赞

理论

在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值。由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明:

  1. valueOfTypeB = typeB(valueOfTypeA)

类型 B 的值 = 类型 B(类型 A 的值)

示例

  1. a := 5.0
  2. b := int(a)
  • 类型转换只能在定义正确的情况下转换成功,

    • 例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将 int16 转换为 int32)。
    • 当从一个取值范围较大的类型转换到取值范围较小的类型时(将 int32 转换为 int16 或将 float32 转换为 int),会发生精度丢失(截断)的情况。
    • 浮点数在转换为整型时,会将小数部分去掉,只保留整数部分。
  • 只有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型),不同底层类型的变量相互转换时会引发编译错误(如将 bool 类型转换为 int 类型)

    package main
    import (

    1. "fmt"
    2. "math"

    )
    func main() {

    1. // 输出各数值范围
    2. fmt.Println("int8 range:", math.MinInt8, math.MaxInt8)
    3. fmt.Println("int16 range:", math.MinInt16, math.MaxInt16)
    4. fmt.Println("int32 range:", math.MinInt32, math.MaxInt32)
    5. fmt.Println("int64 range:", math.MinInt64, math.MaxInt64)
    6. // 初始化一个32位整型值
    7. var a int32 = 1047483647
    8. // 输出变量的十六进制形式和十进制值
    9. fmt.Printf("int32: 0x%x %d\n", a, a)
    10. // 将a变量数值转换为十六进制, 发生数值截断
    11. b := int16(a)
    12. // 输出变量的十六进制形式和十进制值
    13. fmt.Printf("int16: 0x%x %d\n", b, b)
    14. // 将常量保存为float32类型
    15. var c float32 = math.Pi
    16. // 转换为int类型, 浮点发生精度丢失
    17. fmt.Println(int(c))

    }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,668人围观)

还没有评论,来说两句吧...

相关阅读

    相关 强制类型转换

    强制类型转换 有可能会丢失一些数据 double a=9.99999; int ab=(int)a; 如果想对浮点数进行舍入运算,则需使用Math.r

    相关 强制类型转换

    关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:s

    相关 强制类型转换

    在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。 继承关系为:Son extends Father Father f