Go入门系列:基本类型之数值类型

Go语言体系中的基本数据类型总来的来说包括数值类型与字符串类型。

而数值类型又包含整型、浮点型、复数类型。

数值类型

整型

在Go语言中整型分为平台无关整型及平台相关整型,区别主要就在,这些整数类型在不同CPU 架构操作系统下面,它们的长度是否是一致的。

平台无关整型

而无关整型又区分了有符号整型和无符号整型,其表示的数据范围是不一样的。

Go入门系列:基本类型之数值类型
平台相关整型

Go原生提供了三个平台相关整型,分别是int、uint 与 uintptr。

Go入门系列:基本类型之数值类型

特别注意:在编写有移植性要求的代码时,千万不要强依赖这些类型的长度。

可以通过 unsafe 包提供的 SizeOf 函数来获取三个整型在平台上的长度。

func main() {
 var a, b = int(5), uint(6)
 var p uintptr = 0x12345678
 fmt.Println("signed integer a's length is", unsafe.Sizeof(a))
 fmt.Println("unsigned integer b's length is", unsafe.Sizeof(b))
 fmt.Println("uintptr's length is", unsafe.Sizeof(p))
}

// 打印输出
signed integer a's length is 8
unsigned integer b'
s length is 8
uintptr's length is 8
格式化输出

go提供了标准库fmt包可以格式化输出不同进制的形式。

func main() {
 var a int8 = 66
 fmt.Printf("%bn", a) //输出二进制:1000010
 fmt.Printf("%dn", a) //输出十进制:66
 fmt.Printf("%on", a) //输出八进制:102
 fmt.Printf("%On", a) //输出八进制(带0o前缀):0o102
 fmt.Printf("%xn", a) //输出十六进制(小写):42
 fmt.Printf("%Xn", a) //输出十六进制(大写):42
}

浮点型

Go语言提供了float32与float64 两种浮点类型,它们分别对应的就是IEEE754中的单精度与双精度浮点数值类型, 这基本上对应于Java中的float和double类型。

Go语言对浮点类型的表示提供了两种方式, 十进制类型及科学计数法;而其中科学计数法又分为十进制和十六进制两种表示方法。

十进制表示法
3.1415
.15  // 整数部分如果为0,整数部分可以省略不写
81.80
82. // 小数部分如果为0,小数点后的0可以省略不写
科学计数法
十进制表示法:

6674.28e-2 // 6674.28 * 10^(-2) = 66.742800
.12345E+5  // 0.12345 * 10^5 = 12345.000000

十六进制表示法:

0x2.p10  // 2.0 * 2^10 = 2048.000000
0x1.Fp+0 // 1.9375 * 2^0 = 1.937500
格式化输出
var f float64 = 112.676899
 // 浮点类型第一种:十进制表示法
 fmt.Printf("%fn", f) // 112.676899
 // 浮点类型第二种:科学计数法--十进制表示法
 fmt.Printf("%en", f) // 1.126769e+02
 // 浮点类型第二种:科学计数法--十六进制表示法
 fmt.Printf("%xn", f) // 0x1.c2b52502eec7dp+06

复数类型

Go 提供两种复数类型,它们分别是 complex64 和 complex128,complex64 的实部与虚部都是 float32 类型,而 complex128 的实部与虚部都是 float64 类型。如果一个复数没有显示赋予类型,那么它的默认类型为 complex128。

Go提供了三种表示方法。

  1. 使用复数字面值直接初始化一个复数类型变量
var c = 5 + 7i
var d = 0o123 + .12345E+5i // 83+12345i
  1. 使用Go提供的complex函数,创建一个complex128类型值
var c = complex(5, 6) // 5 + 6i
var d = complex(0o123, .12345E+5) // 83+12345i
  1. 使用Go提供的预定义的函数real和imag,可以获取一个复数的实部与虚部,返回值为一个浮点类型
var c = complex(5, 6) // 5 + 6i
r := real(c) // 5.000000
i := imag(c) // 6.000000

自定义数值类型

可以通过Go语言提供的type关键字基于原生数值类型来声明一个新类型。

比如,

type NewInt int32

NewInt是我们新定义的类型,底层是int32类型,但是和原生类型int32却是两种类型,无法直接进行赋值,需要进行显示转换才可以。

type NewInt int32

 var m int = 5
 var n int32 = 6
 var a NewInt = NewInt(m) // ok
 var b NewInt = NewInt(n) // ok

当然如果想要能够直接与原生类型直接赋值使用,Go提供了类型别名(Type Alias)语法来自定义数值类型。

type NewInt = int32

 var m int32 = 5
 var n NewInt = m

总结

Go 的原生数值类型有三类:整型、浮点型和复数型, 通过上面的简单介绍我们可以知道Go与大多数主流语言基本查不多,当然Go也有不一样的, 比如其原生支持复数类型。


参考资料:

极客时间-《Go语言第一课》


祝大家周二搬砖快乐。

— End —

Go入门系列:基本类型之数值类型

欢迎添加君哥个人微信:wayne214,进粉丝群或围观朋友圈

原文始发于微信公众号(君伟说):Go入门系列:基本类型之数值类型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115183.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!