运算符用于在程序运行时执行数学或逻辑运算。
Go 语言内置的运算符有:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
算术运算符
| 运算符 | 描述 |
| + | 相加 |
| - | 相减 |
| * | 相乘 |
| / | 相除 |
| % | 求余 |
| ++ | 自增 |
| -- | 自减 |
关系运算符
关系运算符返回值是布尔类型,如果逻辑正确,比如2大于1,返回true。2>5,逻辑不成立,返回false。
| 运算符 | 描述 |
| == | 检查两个值是否相等 |
| != | 检查两个值是否不相等 |
| > | 检查左边值是否大于右边值 |
| < | 检查左边值是否小于右边值 |
| >= | 检查左边值是否大于等于右边值 |
| <= | 检查左边值是否小于等于右边值 |
逻辑运算符
逻辑运算符是在运算符两边分别有一个表达式(!除外),表达式的值要为布尔类型的true或false。
| 运算符 | 描述 |
| && | 逻辑 AND 运算符。 如果两边的操作数都是 true,则条件 true,否则为 false。 |
| || | 逻辑 OR 运算符。 如果两边的操作数有一个 true,则条件 true,否则为 false。 |
| ! | 逻辑 NOT 运算符。 如果条件为 true,则逻辑 NOT 条件 false,否则为 true。 |
举例
packagemainimport"fmt"funcmain() { varabool=truevarbbool=falseif ( a&&b ) { fmt.Printf("第一行 - 条件为 true\n" ) } if ( a||b ) { fmt.Printf("第二行 - 条件为 true\n" ) } /* 修改 a 和 b 的值 */a=falseb=trueif ( a&&b ) { fmt.Printf("第三行 - 条件为 true\n" ) } else { fmt.Printf("第三行 - 条件为 false\n" ) } if ( !(a&&b) ) { fmt.Printf("第四行 - 条件为 true\n" ) } }
结果:
第二行 - 条件为 true
第三行 - 条件为 false
第四行 - 条件为 true
位运算符
位运算符对整数在内存中的二进制位进行操作。
| 运算符 | 描述 |
| & | 参与运算的两数各对应的二进位相与 |
| | | 参与运算的两数各对应的二进位相或 |
| ^ | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1 |
| << | 左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0 |
| >> | 右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 |
| p | q | p&q | p|q | p^q |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
运算符优先级
| 优先级 | 运算符 |
| 5 | * / % << >> & &^ |
| 4 | + - | ^ |
| 3 | == != < <= > >= |
| 2 | && |
| 1 | || |
