Golang学习之路一六运算符

Golang学习之路一六运算符

算数运算符

符号说明
+相加
-相减
*相乘
/相除
%求余
++自增
自减
package mainimport "fmt"func main() {a := 10b := 6// +fmt.Println(a+b)// -fmt.Println(a-b)// *fmt.Println(a*b)// /fmt.Println(a/b)// %fmt.Println(a%b)// ++fmt.Println(a)a++fmt.Println(a)// -fmt.Println(b)b--fmt.Println(b)
}

关系运算符

符号说明
==等于
!=不等于
>大于
<小于
>=大于等于
<=小于等于
package mainimport "fmt"func main() {a := 10b := 6// ==fmt.Println(a==b)// !=fmt.Println(a!=b)// >fmt.Println(a>b)// <fmt.Println(a<b)// >=fmt.Println(a>=b)// <=fmt.Println(a<=b)// ==fmt.Println(a==b)
}

逻辑运算符

符号说明
&&
!
package mainimport "fmt"func main() {a := 10b := 6c := 6// &&fmt.Println(a > b && b >= c)// ||fmt.Println(a > b || b > c)// !var d boolfmt.Println(!d)
}

赋值运算符

运算符描述实例
=简单的赋值运算符,将一个表达式的值赋给一个左值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
=按位或后赋值

位运算

运算符描述实例
&按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。(A & B) 结果为 12, 二进制为 0000 1100
按位或运算符"
^按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 1。(A ^ B) 结果为 49, 二进制为 0011 0001
<<左移运算符"<<“是双目运算符。左移 n 位就是乘以 2 的 n 次方。 其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<"右边的数指定移动的位数,高位丢弃,低位补 0。A << 2 结果为 240 ,二进制为 1111 0000
>>右移运算符">>“是双目运算符。右移 n 位就是除以 2 的 n 次方。 其功能是把”>>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数。A >> 2 结果为 1
package mainimport "fmt"func main() {var a uint = 60      /* 60 = 0011 1100 */var b uint = 13      /* 13 = 0000 1101 */var c uint = 0c = a & b       /* 12 = 0000 1100 */fmt.Println(c)c = a | b       /* 61 = 0011 1101 */fmt.Println(c)c = a ^ b       /* 49 = 0011 0001 */fmt.Println(c)c = a << 2     /* 240 = 1111 0000  a*(2**2) */fmt.Println(c)c = a >> 2     /* 15 = 0000 1111 a/(2*2) */fmt.Println(c)
}

其他运算符

运算符描述实例
&返回变量存储地址&a; 将给出变量的实际地址。
*指针变量。*a; 是一个指针变量
package mainimport "fmt"func main() {var a int = 4var b int32var c float32var ptr *int/* 运算实例 */fmt.Printf("a 变量类型为 = %T\n", a );fmt.Printf("b 变量类型为 = %T\n", b );fmt.Printf("c 变量类型为 = %T\n", c );/*  & 和 * 运算符实例 */ptr = &a     /* 'ptr' 包含了 'a' 变量的地址 */fmt.Printf("a 的值为  %d\n", a);fmt.Printf("*ptr 为 %d\n", *ptr);
}

运算符优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

优先级运算符
5* / % << >> & &^
4+ - \ ^
3== != < <= > >=
2&&
1

当然,我们可以通过使用括号来临时提升某个表达式的整体运算优先级。