算数运算符
程序在运行过程中执行数学运算时候需要算数运算符。
| 运算符 | 描述 | 说明 |
|---|---|---|
| + | 相加 | 2 + 5 = 7 |
| - | 相减 | 5 - 2 = 3 |
| * | 相乘 | 2 * 5 = 10 |
| / | 相除 取商 | 5 / 2 = 2 |
| % | 相除 取余数 | 5 / 2 = 1 |
| ++ | 自身加1 | 5++ = 6 |
| -- | 自身减1 | 5-- = 4 |
关系运算符
关系运算符的结果是bool类型的
| 运算符 | 描述 | 说明 |
|---|---|---|
| == | 比较相等 | 6 == 6 结果 true |
| != | 不相等 | 6 != 6 结果 false |
| > | 大于 | 6 > 1 结果 true |
| < | 小于 | 6 < 1 结果 false |
| >= | 大于等于 | 6 >= 6 结果 true |
| <= | 小于等于 | 6 <= 5 结果 false |
逻辑运算符
| 运算符 | 描述 | 说明 |
|---|---|---|
| && | 逻辑与 | A && B,若A为真,B为假,则结果为false;若A为真,B为真,则结果为true(一假则假,全真为真) |
| || | 逻辑与 | A && B,若A为真,B为假,则结果为true(一真为真,全假为假) |
| ! | 逻辑非 | 相反方向为真(假为真,真为假) |
位运算符
| 运算符 | 描述 | 说明 |
|---|---|---|
| & | 按位与 | 两个位都为1时,结果才为1 |
| | | 按位或 | 两个位都为0时,结果才为0 |
| ^ | 按位异或 | a^b 需要将ab都转为二进制,看对应位置上的数值,相同为0,不同为1 |
| &^ | 位清空 | a&^b 对于b上面的每个数值,如果为0,则去对应a上的数值,如果为1,则结果位取0 |
| << | 按位左移 | a<<b 将a转为二进制,向左移动b个位 |
| >> | 按位右移 | a>>b 将a转为二进制,向右移动b个位 |
package main
import "fmt"
func main() {
var a int8 = 12
var b int8 = 15
fmt.Printf("%b, %b \n", a, b) // 1100 a的二进制 | 1111 b的二进制
// 按位与
fmt.Printf("%b \n", a&b) // 12 1100 & 1111 = 1100
// a的二进制 1100
// b的二进制 1111
// 按位与计算 1100 转为十进制 12
// 按位或
fmt.Printf("%b \n", a|b) // 15 1100 | 1111 = 1111
// a的二进制 1100
// b的二进制 1111
// 按位或计算 1111 转为十进制 15
// 按位异或
fmt.Printf("%b \n", a^b) // 3 1100 ^ 1111 = 0011
// a的二进制 1100
// b的二进制 1111
// 按位异或计算 0011 转为十进制 3
// 按位清空
var a1 int8 = 7
var b1 int8 = 3
fmt.Printf("%b \n", a1&^b1) // 4 0111 &^ 0011 = 0100
// a的二进制 0111
// b的二进制 0011
// 按位清空计算 0100 转为十进制 4
// 左移
fmt.Printf("%b \n", a<<2) // 48 1100 << 2 = 110000
// a的二进制 1100
// 左移计算 110000 转为十进制 48
// 右移
fmt.Printf("%b \n", a>>2) // 3 1100 >> 2 = 11
// a的二进制 1100
// 右移计算 11 转为十进制 3
}
赋值运算符
| 运算符 | 描述 |
|---|---|
| = | 将等号右侧的数值,赋值给左侧的变量 |
| += | 自身加上后面的值,然后赋值给左侧的变量 |
| -= | 自身减去后面的值,然后赋值给左侧的变量 |
| /= | 自身除以后面的值,然后赋值给左侧的变量 |
| %= | 自身与后面的值求得余数之后,赋值给左侧的变量 |
| <<= | 左移后再赋值 |
| >>= | 右移后再赋值 |
| &= | 按位与后再赋值 |
| |= | 按位或后再赋值 |
| ^= | 按位异或后再赋值 |
占位符号
占位符表示在程序中输出一行字符串时候,或者格式化输出字符串的时候使用。go内置包fmt中Printf方法可以在控制台格式化打印出用户输入的内容。fmt.Printf("%T",x)
| 占位符 | 说明 | 举例 | 输出 |
|---|---|---|---|
| %d | 十进制的数字 | fmt.Printf("%d", 10) | 10 |
| %b | 二进制的数字 | fmt.Printf("%b", 5) | 101 |
| %T | 取类型 | fmt.Printf("%T", true) | bool |
| %s | 取字符串 | fmt.Printf("%s", "123") | 123 |
| %t | 去bool类型的值 | fmt.Printf("%t", true) | true |
| %p | 取内存地址 | p := "123" fmt.Printf("%p", &p) | 0xc000096210 |