一、运算符类别
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符
1.1、算术运算符
案例1
package main
import (
"fmt"
)
func main() {
var a int = 10
var b int = 20
var c int
c = a + b
fmt.Printf("第一行 c 的值为 %d\n", c )
c = a - b
fmt.Printf("第二行 c 的值为 %d\n", c )
c = a * b
fmt.Printf("第三行 c 的值为 %d\n", c )
c = a / b
fmt.Printf("第四行 c 的值为 %d\n", c )
c = a % b
fmt.Printf("第五行 c 的值为 %d\n", c )
a++
fmt.Printf("第六行 a 的值为 %d\n", a )
a=10 // 为了方便测试,a 这里重新赋值为 21
a--
fmt.Printf("第七行 a 的值为 %d\n", a )
}
输出
第一行 c 的值为 30
第二行 c 的值为 -10
第三行 c 的值为 200
第四行 c 的值为 0
第五行 c 的值为 10
第六行 a 的值为 11
第七行 a 的值为 9
1.2、关系运算符
案例1
package main
import (
"fmt"
)
func main() {
var a int = 10
var b int = 20
if( a == b ) {
fmt.Printf("第一行 a 等于 b\n" )
} else {
fmt.Printf("第一行 a 不等于 b\n" )
}
if ( a < b ) {
fmt.Printf("第二行 a 小于 b\n" )
} else {
fmt.Printf("第二行 a 不小于 b\n" )
}
if ( a > b ) {
fmt.Printf("第三行 a 大于 b\n" )
} else {
fmt.Printf("第三行 a 不大于 b\n" )
}
if ( a <= b ) {
fmt.Printf("第四行 a 小于等于 b\n" )
}
if ( b >= a ) {
fmt.Printf("第五行 b 大于等于 a\n" )
}
}
输出:
第一行 a 不等于 b
第二行 a 小于 b
第三行 a 不大于 b
第四行 a 小于等于 b
第五行 b 大于等于 a
1.3、逻辑运算符
案例1
package main
import (
"fmt"
)
func main() {
var a bool = true
var b bool = false
if (a && b) {
fmt.Printf("第一行 - 条件为 true\n")
} else {
fmt.Printf("第一行 - 条件为 false\n")
}
if (a || b) {
fmt.Printf("第二行 - 条件为 true\n")
}
if (!(a && b)) {
fmt.Printf("第三行 - 条件为 true\n")
}
}
输出
第一行 - 条件为 false
第二行 - 条件为 true
第三行 - 条件为 true
1.4、位运算符
假定 A = 60; B = 13; 其二进制数转换为:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
//异或,不一样为1
A^B = 0011 0001
案例1
package main
import "fmt"
func main() {
var a uint = 60 /* 60 = 0011 1100 */
var b uint = 13 /* 13 = 0000 1101 */
var c uint = 0
c = a & b /* 12 = 0000 1100 */
fmt.Printf("第一行 - c 的值为 %d\n", c )
c = a | b /* 61 = 0011 1101 */
fmt.Printf("第二行 - c 的值为 %d\n", c )
c = a ^ b /* 49 = 0011 0001 */
fmt.Printf("第三行 - c 的值为 %d\n", c )
c = a << 2 /* 240 = 1111 0000 */
fmt.Printf("第四行 - c 的值为 %d\n", c )
c = a >> 2 /* 15 = 0000 1111 */
fmt.Printf("第五行 - c 的值为 %d\n", c )
}
输出
第一行 - c 的值为 12
第二行 - c 的值为 61
第三行 - c 的值为 49
第四行 - c 的值为 240
第五行 - c 的值为 15
1.5、赋值运算符
案例1
package main
import "fmt"
func main() {
var a int = 4
var c int
c = a
fmt.Printf("第 1 行 : = 运算符实例,c 值为 = %d\n", c )
c += a
fmt.Printf("第 2 行 : += 运算符实例,c 值为 = %d\n", c )
c -= a
fmt.Printf("第 3 行 : -= 运算符实例,c 值为 = %d\n", c )
c *= a
fmt.Printf("第 4 行 : *= 运算符实例,c 值为 = %d\n", c )
c /= a
fmt.Printf("第 5 行 : /= 运算符实例,c 值为 = %d\n", c )
c = 4;
c <<= 2
fmt.Printf("第 6行 - <<= 运算符实例,c 值为 = %d\n", c )
c >>= 2
fmt.Printf("第 7 行 : >>= 运算符实例,c 值为 = %d\n", c )
c &= 2
fmt.Printf("第 8 行 : &= 运算符实例,c 值为 = %d\n", c )
c ^= 2
fmt.Printf("第 9 行 : ^= 运算符实例,c 值为 = %d\n", c )
c |= 2
fmt.Printf("第 10 行 : |= 运算符实例,c 值为 = %d\n", c )
}
输出
第 1 行 : = 运算符实例,c 值为 = 4
第 2 行 : += 运算符实例,c 值为 = 8
第 3 行 : -= 运算符实例,c 值为 = 4
第 4 行 : *= 运算符实例,c 值为 = 16
第 5 行 : /= 运算符实例,c 值为 = 4
第 6行 - <<= 运算符实例,c 值为 = 16
第 7 行 : >>= 运算符实例,c 值为 = 4
第 8 行 : &= 运算符实例,c 值为 = 0
第 9 行 : ^= 运算符实例,c 值为 = 2
第 10 行 : |= 运算符实例,c 值为 = 2
1.6、其他运算符
案例1
package main
import "fmt"
func main() {
var a int = 4
var b int32
var c float32
var d *int
/* 运算符实例 */
fmt.Printf("第 1 行 : a 变量类型为 = %T\n", a );
fmt.Printf("第 2 行 : b 变量类型为 = %T\n", b );
fmt.Printf("第 3 行 : c 变量类型为 = %T\n", c );
// & 和 * 运算符
// d 包含了 a 变量的地址
d = &a
fmt.Printf("a 内存地址为 %d\n", d);
fmt.Printf("*d 指针值为 %d\n", *d);
}
输出
第 1 行 : a 变量类型为 = int
第 2 行 : b 变量类型为 = int32
第 3 行 : c 变量类型为 = float32
a 内存地址为 824633761992
*d 指针值为 4
二、运算符优先级
你可以通过使用括号来临时提升某个表达式的整体运算优先级。