写点什么

Go 学习笔记之 数据类型

发布于: 54 分钟前
Go 学习笔记之 数据类型

Go 语言的数值类型包括几种不同大小的整数、浮点数和复数。每种数值类型都决定了对应的大小范围和是否支持正负符号。

我们先从整数类型开始介绍。

整型

Go 语言同时提供了有符号和无符号类型的整数运算。这里有 int8、int16、int32 和 int64 四种截然不同大小的有符号整数类型,分别对应 8、16、32、64bit 大小的有符号整数,与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整数类型。

不管它们的具体大小,int、uint 和 uintptr 是不同类型的兄弟类型。其中 int 和 int32 也是不同的类型,即使 int 的大小也是 32bit,在需要将 int 当作 int32 类型的地方需要一个显式的类型转换操作,反之亦然。

其中有符号整数采用 2 的补码形式表示,也就是最高 bit 位用来表示符号位,一个 n-bit 的有符号数的值域是从 $-2^{n-1}$到 $2^{n-1}-1$。无符号整数的所有 bit 位都用于表示非负数,值域是 0 到 $2^n-1$。

例如,int8 类型整数的值域是从-128 到 127,而 uint8 类型整数的值域是从 0 到 255。


二元运算符

下面是 Go 语言中关于算术运算、逻辑运算和比较运算的二元运算符,它们按照优先级递减的顺序排列:

*      /      %      <<       >>     &       &^+      -      |      ^==     !=     <      <=       >      >=&&||
复制代码

二元运算符有五种优先级。

在同一个优先级,使用左优先结合规则,但是使用括号可以明确优先顺序,使用括号也可以用于提升优先级,例如mask & (1 << 28)


一个算术运算的结果,不管是有符号或者是无符号的,如果需要更多的 bit 位才能正确表示的话,就说明计算结果是溢出了。超出的高位的 bit 位部分将被丢弃。如果原始的数值是有符号类型,而且最左边的 bit 位是 1 的话,那么最终结果可能是负的,例如 int8 的例子:

var u uint8 = 255fmt.Println(u, u+1, u*u) // "255 0 1"
var i int8 = 127fmt.Println(i, i+1, i*i) // "127 -128 1"
复制代码


大小比较

两个相同的整数类型可以使用下面的二元比较运算符进行比较;比较表达式的结果是布尔类型。

==    等于!=    不等于<     小于<=    小于等于>     大于>=    大于等于
复制代码

字符打印

字符使用%c参数打印,或者是用%q参数打印带单引号的字符:

ascii := 'a'unicode := '国'newline := '\n'fmt.Printf("%d %[1]c %[1]q\n", ascii)   // "97 a 'a'"fmt.Printf("%d %[1]c %[1]q\n", unicode) // "22269 国 '国'"fmt.Printf("%d %[1]q\n", newline)       // "10 '\n'"
复制代码



作者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专注架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一起成长

关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。



Thanks for reading!

发布于: 54 分钟前阅读数: 2
用户头像

坚持分享接地气儿的架构技术文章! 2018.02.26 加入

同名微信公众号「架构精进之路」,专注软件架构研究,技术学习与职业成长!坚持原创总结、沉淀和分享,希望能带给大家一些引导和启发,感谢各位的支持(关注、点赞、分享)!

评论

发布
暂无评论
Go 学习笔记之 数据类型