内容简介:整型是所有编程语言里最基础的数据类型,Go 语言默认支持如下这些整型类型:在 PHP 中,默认只有相比较之下,Go 支持的整型类型要丰富的多,你可以根据需要设置合适的整型类型,以节省内存空间,此外
整型
整型是所有编程语言里最基础的数据类型,Go 语言默认支持如下这些整型类型:
类型 | 长度(单位:字节) | 说明 | 值范围 | 默认值 |
---|---|---|---|---|
int8
|
1 | 带符号8位整型 | -128~127 | 0 |
uint8
|
1 |
无符号8位整型,与 byte
类型等价 |
0~255 | 0 |
int16
|
2 | 带符号16位整型 | -32768~32767 | 0 |
uint16
|
2 | 无符号16位整型 | 0~65535 | 0 |
int32
|
4 |
带符号32位整型,与 rune
类型等价 |
-2147483648~2147483647 | 0 |
uint32
|
4 | 无符号32位整型 | 0~4294967295 | 0 |
int64
|
8 | 带符号64位整型 | -9223372036854775808~9223372036854775807 | 0 |
uint64
|
8 | 无符号64位整型 | 0~18446744073709551615 | 0 |
int
|
32位或64位 | 与具体平台相关 | 与具体平台相关 | 0 |
uint
|
32位或64位 | 与具体平台相关 | 与具体平台相关 | 0 |
uintptr
|
与对应指针相同 | 无符号整型,足以存储指针值的未解释位 | 32位平台下为4字节,64位平台下为8字节 | 0 |
在 PHP 中,默认只有 int
这一种带符号的整数类型,其长度与平台相关,在 32 位平台下其最大值为 20 亿左右(等同于 Go 语言中的 int32),64 位平台下的最大值通常是大约 9E18(等同于 Go 语言中的 int64),并且 PHP 中的整型不支持无符号类型,你可以通过 PHP_INT_MAX
常量在 PHP 中获取当前平台的最大整型值。
相比较之下,Go 支持的整型类型要丰富的多,你可以根据需要设置合适的整型类型,以节省内存空间,此外 int
和 int32
在 Go 语言里被认为是两种不同的类型(同理, int
和 int64
也是不同的类型),编译器也不会帮你自动做类型转换,比如以下的例子会有编译错误:
var int_value_1 int8 int_value_2 := 8 // int_value_2 将会被自动推导为 int 类型 int_value_1 = int_value_2 // 编译错误
注:作为弱类型的 PHP 语言,没有类似编译问题,因为变量类型都是在运行时动态决定的,在编译期根本没有类型之分。
编译错误类似于:
cannot use int_value_2 (type int) as type int8 in assignment
使用强制类型转换可以解决这个编译错误:
int_value_1 = int8(int_value_2)) // 编译通过
注:关于类型转换我们在后面介绍完所有数据类型后会单独介绍。
运算符
算术运算符
和 PHP 类似,Go 语言支持所有常规的整数四则运算: +
、 -
、 *
、 /
和 %
(取余运算只能用于整数),不过由于强类型的关系,在 Go 语言中,不同类型的整型值不能直接进行算术运算,比如下面这样计算就会报编译错误:
int_value_3 := int_value_1 + int_value_2
编译错误信息如下:
invalid operation: int_value_1 + int_value_2 (mismatched types int8 and int)
类型转化之后就好了:
int_value_3 := int_value_1 + int8(int_value_2)
在 Go 语言中,支持类似 PHP 或其他语言中的自增/自减运算符,即 ++
/ --
,但是只能作为语句,不能作为表达式,且只能用作后缀,不能放到变量前面:
int_value_1++ // 有效,int_value_1 的值变成 9 int_value_1 = int_value_1++ // 无效,编译报错 --int_value_1 // 无效,编译报错
也支持 +=
、 -=
、 *=
、 /=
、 %=
这种快捷写法:
int_value_1 += int_value_1 // 18 int_value_1 -= int_value_1 // 0 int_value_1 *= int_value_1 // 81 int_value_1 /= int_value_1 // 1 int_value_1 %= int_value_1 // 0
比较运算符
和 PHP 类似,Go 语言支持以下几种常见的比较运算符: >
、 <
、 ==
、 >=
、 <=
和 !=
,比较运算符运行的结果是布尔值。
与上篇教程介绍的一样,不同类型的值不能放在一起比较,否则会报编译错处:
if int_value_1 == int_value_2 { fmt.Println("int_value_1 和 int_value_2 相等") }
相同类型的值才可以:
if int_value_1 < int_value_3 { fmt.Println("int_value_1 比 int_value_3 小") }
由此可见,所有比较运算符在比较的时候都会考虑进数据类型的因素,所以不需要类似 PHP 中 ===
和 !==
这种严格比较运算符。
不过,各种类型的整型变量都可以直接与字面常量进行比较,比如:
if int_value_1 == 8 { fmt.Println("int_value_1 = 8") }
位运算符
位运算符以二进制的方式对数值进行运算(效率更高),和 PHP 类似,Go 语言支持以下这几种位运算符:
运算符 | 含义 | 结果 |
---|---|---|
x & y
|
按位与 | 把 x 和 y 都为 1 的位设为 1 |
x | y
|
按位或 | 把 x 或 y 为 1 的位设为 1 |
x ^ y
|
按位异或 | 把 x 和 y 一个为 1 一个为 0 的位设为 1 |
^x
|
按位取反 |
把 x 中为 0 的位设为 1,为 1 的位设为 0,PHP 中对应的位运算符是 ~
,与 C 语言一致 |
x << y
|
左移 | 把 x 中的位向左移动 y 次,每次移动相当于乘以 2 |
x >> y
|
右移 | 把 x 中的位向右移动 y 次,每次移动相当于除以 2 |
我们可以做一些简单的测试:
var int_value_bit uint8 int_value_bit = 255 int_value_bit = ^int_value_bit fmt.Println(int_value_bit) // 0 int_value_bit = 1 int_value_bit = int_value_bit << 3 fmt.Println(int_value_bit) // 8
逻辑运算符
与 PHP 类似,Go 语言也支持以下逻辑运算符:
运算符 | 含义 | 结果 |
---|---|---|
x && y
|
逻辑与运算符(AND) | 如果 x 和 y 都是 true,则结果为 true,否则结果为 false |
x || y
|
逻辑或运算符(OR) | 如果 x 或 y 是 true,则结果为 true,否则结果为 false |
!x
|
逻辑非运算符(NOT) | 如果 x 为 true,则结果为 false,否则结果为 true |
逻辑运算符计算的结果也是布尔值,通常我们可以组合使用逻辑运算符和比较运算符:
if int_value_1 < int_value_3 && int_value_1 == 8 { fmt.Println("条件为真") }
具体使用方式和 PHP 并没有什么区别,这里不再重复演示了。
运算符优先级
上面介绍的 Go 语言运算符优先级如下所示(由上到下表示优先级从高到低,或者数字越大,优先级越高):
6 ^(按位取反) ! 5 * / % << >> & &^ 4 + - | ^(按位异或) 3 == != < <= > >= 2 && 1 ||
注: ++
或 --
只能出现在语句中,不能用于表达式,故不参与优先级判断。
以上所述就是小编给大家介绍的《Go 语言函数式编程系列教程(四) —— 数据类型篇:整型及运算符》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- ES6—扩展运算符和rest运算符(6)
- C/C++三元运算符实际上是否具有与赋值运算符相同的优先级?
- Python 运算符
- Python算术运算符
- 004.Python运算符
- JavaScript③运算符
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mission Python
Sean McManus / No Starch Press / 2018-9-18 / GBP 24.99
Launch into coding with Mission Python, a space-themed guide to building a complete computer game in Python. You'll learn programming fundamentals like loops, strings, and lists as you build Escape!, ......一起来看看 《Mission Python》 这本书的介绍吧!
XML 在线格式化
在线 XML 格式化压缩工具
RGB CMYK 转换工具
RGB CMYK 互转工具