go中基本数据类型的相互转换

代码
// 基本数据类型的相互转换
package main

import (
    // 如果一个包没有被使用过,但又不想去掉,可在包名前加"_ "表示忽略
    // 比如:_ "unsafe"
    "fmt"
    _ "unsafe"
)

func main() {
    // n1为int类型
    var n1 int = 100
    // n2为int64类型,将n1赋值给n2的时候,需要将n1显式的转换为int64类型
    var n2 int64 = int64(n1)
    // 同上,需要将n1显式转换为int8类型
    var n3 int8 = int8(n1)
    // 同上,需要将n1显式转换为float32类型
    var f1 float32 = float32(n1)
    // 格式化输出结果
    // 可以看出不管将n1显式转换为什么类型,最后n1自身的类型仍然不变还是int类型
    fmt.Printf("n1 = %v, n2 = %v, n3 = %v, f1 = %v, 最后n1的类型为%T\n", n1, n2, n3, f1, n1) // n1 = 100, n2 = 100, n3 = 100, f1 = 100, 最后n1的类型为int

    // n4为int32类型
    var n4 int32 = 1000
    // n5为int8类型,将n4赋值给n5,需要将n4从
    // int32显式转换为int8,此时n4的值为1000大
    // 于int8的最大值127,此时会按溢出处理,最终
    // 输出的结果会与之前的不一样,输出-24
    var n5 int8 = int8(n4)
    // 格式化输出结果
    fmt.Printf("n4 = %v, n5 = %v\n", n4, n5) // n4 = 1000, n5 = -24

    // 练习1
    var t1 int32 = 12
    var t2 int64
    var t3 int8
    // t1 + 50 是int32类型
    // 需要将t1转换为int64
    t2 = int64(t1) + 50
    // t1 + 50 是int32类型
    // 需要将t1转换为int8
    t3 = int8(t1) + 50
    // 格式化输出结果
    fmt.Printf("t1 = %v, t2 = %v, t3 = %v\n", t1, t2, t3) // t1 = 12, t2 = 62, t3 = 62

    // 练习2
    var t4 int32 = 15
    var t5 int8
    var t6 int8
    // 输出结果会按溢出处理,但是编译时不会报错
    t5 = int8(t4) + 127
    // 报错:constant 128 overflows int8,编译无法通过
    // t6 = int8(t4) + 128
    fmt.Printf("t4 = %v, t5 = %v, t6 = %v\n", t4, t5, t6) // t4 = 15, t5 = -114, t6 = 0
}
总结

查看源代码

猜你喜欢

转载自www.cnblogs.com/goujian/p/11947349.html