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语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 常量变量的声明:多个变量的初始化声明与赋值

go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 变量的类型零值

go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 变量的生命周期:堆(heap)