基本数据类型之整型
一 整型介绍
Go语言中提供了不同类型的整型,主要分为有符号和无符号两大类
类型 | 描述 |
---|---|
uint8 | 无符号 8位整型 (0 到 255),对应go语言的byte类型 |
uint16 | 无符号 16位整型 (0 到 65535) |
uint32 | 无符号 32位整型 (0 到 4294967295) |
uint64 | 无符号 64位整型 (0 到 18446744073709551615) |
int8 | 有符号 8位整型 (-128 到 127) |
int16 | 有符号 16位整型 (-32768 到 32767),对应C语言中的short类型 |
int32 | 有符号 32位整型 (-2147483648 到 2147483647),对应go语言的rune类型 |
int64 | 有符号 64位整型 (-9223372036854775808 到 9223372036854775807),对应C语言中的long类型 |
此外还有三个特殊的整型,其中int是所有整型里应用最广泛的,也是类型推导的默认类型。
类型 | 描述 |
---|---|
uint | 在32位平台下大小与unit32一样, 64位平台下大小与unit64一样 |
int | 在32位平台下大小与int32一样, 64位平台下大小与int64一样 |
uintptr | 无符号整型,没有指定具体的bit大小但是足以容纳指针,所以uintptr通常用于存放一个指针。uintptr类型只有在底层编程是才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方 |
二 声明与初始化
声明语法如下,重点关注一下字面量即可
Go1.13版本之后引入了数字字面量语法Number literals syntax,这样便于开发者以二进制、八进制或十六进制浮点数的格式定义数字,例如:
ps:我们可以借助fmt函数来将一个整数以不同进制形式展示。
注意点
- 1、go语言是强类型语言,数据类型有明确的边界,例如:int在32位平台下被解析成了32位,虽然它的宽度与int32一样,但它与int32也是不同的类型,int64同理,在需要将int当作int32类型的地方需要我们自己做显式的类型转换操作/强制转换,反之亦然,
- 2、len()返回的是一个int类型,实际使用中,切片或 map 的元素数量等都可以用
int
来表示。 - 3、在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用
int
和uint
。
三 数据类型转换
整型与浮点型为兼容类型,可以相互转换,本节我们主要介绍:整型、浮点型转为—>整型
一:显式转换规则如下:
-
1.1、无类型的量(无类型的整数、无类型的浮点数)可以转为整型,超出目标类型值域范围就报错
例1:无类型的整型字面量—>整型,超出目标整型的值域范围就会报错
例2:无类型的浮点型字面量—>整型,若浮点数需要被截断就会报错,需要截断也就是超出了范围
-
1.2、有类型的量(有类型的整数、有类型的浮点数)也可以转为整型,超出目标类型值域范围不报错,但是整数会溢出、浮点数则丢失精度,应该尽量避免
例1:有类型的整数—>整型,超出值域范围不报错,但是值会溢出
例2:有类型的浮点数—>整型,存在需要截断的值不报错,但是会直接丢到小数点后的内容、精度丧失
强调:我们应该尽量避免溢出或丢失精度!!!
大多数情况下整型的转换都不要超过目标类型值域,如此,则只改变了类型,并未改变数值,看似没啥用,其实不然,在有些场景下你必须这么做来告诉编译器如何解释这个值,以达到遵循强类型原则的目的,如下
二:隐式转换,只针对无类型的量,底层发生的就是T(x)
四 基本操作
4.1 二元运算
整型属于数字,数字之间支持加减乘除等算数运算以及比较运算,但仅限于同类型之间,非同类型经隐式或显式转换成相同类型后也可以,示例如下
(1)算数运算
(2)相等性比较
(3)比大小
五 在函数参数中传递
值传递