golang基础(9.整形以及运算符)
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不支持类型自动转换,需要转换类型后才能进行运算
package main
import "fmt"
func main() {
var num1 int32 = 10
num2 := 8 // 自动推导为int
var num3 int = int(num1) + num2 // 需要对类型进行转换才可以运算
fmt.Println(num3)
}
:::success 此外,可以通过增加前缀 0 来表示八进制数(如:077),增加前缀 0x 来表示十六进制数(如:0xFF),以及使用 E 来表示 10 的连乘(如:1E3 = 1000)。 :::
运算符
算数运算符
和 PHP 类似,Go 语言支持所有常规的整数四则运算:+、-、*、/ 和 %(取余运算只能用于整数),不过由于强类型的关系,在 Go 语言中,不同类型的整型值不能直接进行算术运算。比如
var a int = 8
var b int32 = 10
a+b
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 语言支持以下几种常见的比较运算符: >、<、==、>=、<= 和 !=,比较运算符运行的结果是布尔值。不同类型的值不能放在一起比较,否则会报编译错处,如下
var a int = 1
var b int8 = 2
a > b
不过,各种类型的整型变量都可以直接与字面常量进行比较
if a == 1 {
fmt.Println("a = 1")
}
位运算符
位运算符以二进制的方式对数值进行运算(效率更高),和 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 |
逻辑运算符
与 PHP 类似,Go 语言也支持以下逻辑运算符:
| 运算符 | 含义 | 结果 |
|---|---|---|
| x && y | 逻辑与运算符(AND) | 如果 x 和 y 都是 true,则结果为 true,否则结果为 false |
| x || y | 逻辑或运算符(OR) | 如果 x 或 y 是 true,则结果为 true,否则结果为 false |
| !x | 逻辑非运算符(NOT) | 如果 x 为 true,则结果为 false,否则结果为 true |
运算符优先级
上面介绍的 Go 语言运算符优先级如下所示(由上到下表示优先级从高到低,或者数字越大,优先级越高):
6 ^(按位取反) !
5 * / % << >> & &^
4 + - | ^(按位异或)
3 == != < <= > >=
2 &&
1 ||