go语言学习笔记 — 基本语法 — 变量的类型(1):变量的数值类型转换

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))
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值