Go语言的运算符
1 算术运算符
运算符 | 术语 | 示例 | 结果 |
+ | 加 | 10 + 5 | 15 |
- | 减 | 10 - 5 | 5 |
| 乘 | 10 5 | 50 |
/ | 除 | 10 / 5 | 2(值取整数位,要想带小数为,则10.0/5=2.0) |
% | 取模(取余) | 10 % 3 | 1(取模公式:a-a/b*b) |
++ | 后自增,没有前自增 (单独语句,并不是运算符) | a=0; a++ | a=1 |
— | 后自减,没有前自减 (单独语句,并不是运算符) | a=2; a— | a=1 |
2 关系运算符
运算符 | 术语 | 示例 | 结果 |
== | 相等于 | 4 == 3 | false |
!= | 不等于 | 4 != 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 1 | true |
3 逻辑运算符
运算符 | 术语 | 示例 | 结果 |
! | 非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
&& | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 |
|| | 或 | a || b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
package main
import "fmt"
func main(){
fmt.Println("4>3 结果:", 4>3)
fmt.Println("4!=3 结果", 4!=3)
fmt.Println("!(4>3) 结果:", !(4>3))
fmt.Println("!(4!=3) 结果", !(4!=3))
//&& 与,并且, 左边右边都为真,结果才为真
fmt.Println("true && true 结果:", true && true)
fmt.Println("true && false 结果:", true && false)
// || 或 左边和右边都为假的时候,结果才为假,其他都为真
fmt.Println("true || false 结果:", true || false)
fmt.Println("false || false 结果:", false || false)
a := 10
// fmt.Println("0<a<=10 结果为:", 0<a<=10) //go中不支持这种连写,python支持
fmt.Println("0<a && a <=10 的结果:", 0<a && a <=10)
}
4 位运算符
运算符 | 术语 | 说明 | 示例 |
& | 按位与 | 参与运算的两数各对应的二进位相与(两位都为1则为1) | 60 & 13 结果为12 |
| | 按位或 | 参与运算的两数各对应的二进位相或(两位有一个为1就为1) | 60 | 13 结果为61 |
^ | 异或 | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1(两位不一样则为1) | 60 ^ 13 结果为240 |
<< | 左移 | 左移n位就是乘以2的n次方。 | 4 << 2 结果为16 |
>> | 右移 | 右移n位就是除以2的n次方。 | 4 >> 2 结果为1 |
//权限设计
100 ---4 r
010 ---2 w
001 ---1 x
100|010 = 110 //增加权限
110&100 = 100 //验证权限
110^100 = 010 // 删除权限
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
)
5 赋值运算符
运算符 | 说明 | 示例 |
= | 普通赋值 | c = a + b 将 a + b 表达式结果赋值给 c |
+= | 相加后再赋值 | c += a 等价于 c = c + a |
-= | 相减后再赋值 | c -= a 等价于 c = c - a |
= | 相乘后再赋值 | c = a 等价于 c = c * a |
/= | 相除后再赋值 | c /= a 等价于 c = c / a |
%= | 求余后再赋值 | c %= a 等价于 c = c % a |
<<= | 左移后赋值 | c <<= 2 等价于 c = c << 2 |
>>= | 右移后赋值 | c >>= 2 等价于 c = c >> 2 |
&= | 按位与后赋值 | c &= 2 等价于 c = c & 2 |
^= | 按位异或后赋值 | c ^= 2 等价于 c = c ^ 2 |
|= | 按位或后赋值 | c |= 2 等价于 c = c | 2 |
6 其他运算符
运算符 | 术语 | 示例 | 说明 |
& | 取地址运算符 | &a | 变量a的地址 |
| 取值运算符 | a | 指针变量a所指向内存的值 |
7 运算符优先级,在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。
优先级 | 运算符 |
7 | ^ ! |
6 | * / % << >> & &^ |
5 | + - | ^ |
4 | == != < <= >= > |
3 | <- |
2 | && |
1 | || |
我们来做一个题吧,有一堆数字,其他数字都出现了两次,只有一个出现了一次,找出这个数字
func main() {
var ret int
s1 := [...]int{ 1,1,2,2,3,4,4,5,6,5,6}
for _,i := range s1{
ret ^= i
}
fmt.Println(ret)
}
还没有评论,来说两句吧...