go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 变量的数值类型转换
Posted Locutus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 变量的数值类型转换相关的知识,希望对你有一定的参考价值。
go语言使用类型前置加括号的方式进行类型转换。
- 格式
若A是一个全新的类型,需要加:
;若之前已经声明过A,则不需要加:
。其中,TypeOfA代表要转换的类型,B包括变量、复杂算子和函数返回值等表达式。
A [:]= TypeOfA(B)
实例
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
// 表达式T(v)将值v转换为类型T。
var f float64 = math.Sqrt(float64(x*x + y*y))
var z int = int(f)
fmt.Println(x, y, f, z)
}
- 一些关于数值的类型转换
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
或者
i := 42
f := float64(i)
u := uint(f)
对不同类型之间的变量赋值时,与C不同,go需要显式转换。
注:go中不存在隐式转换,所有类型转换必须显式声明。并且,在两种相互兼容的类型之间做数值转换。
- 数值截断
在说数据类型转换时,我们需要考虑两种类型的关系和范围,是否会发生数值截断等。
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
// 输出变量的十六进制形式和十进制值
fmt.Printf("int32: 0x%x %d\\n", a, a)
// 将a变量数值转换为十六进制,从32位有符号整型转换为16位有符号整型。
// 由于16位变量没有32位变量的数值范围大,因此数值会发生截断。
b := int16(a)
// 输出变量的十六进制形式和十进制值
fmt.Printf("int16: 0x%x %d\\n", b, b)
// 将常量保存为float32类型
// math.Pi是math包的常量,默认没有类型,会在引用到的地方自动根据实际类型进行推导
var c float32 = math.Pi
// 转换为int类型,浮点发生精度丢失
// 把float32转换为int类型并输出
fmt.Println(int(c))
}
以上是关于go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 变量的数值类型转换的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 常量变量的声明:单个变量的声明与赋值
go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 变量的数值类型转换
go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 常量变量的声明:变量初始化声明和变量赋值
go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 常量变量的声明:多个变量的初始化声明与赋值