运算符用于在程序运行时执行数学或逻辑运算。
Go语言内置的运算符有:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
算术运算符
- 算术运算符主要有:+、-、*、/、%(求余)、++(自增)、--(自减)
关系运算符
- 关系运算符主要有:==、!=、>、<、>=、<=
逻辑运算符
- 逻辑运算符主要有:&&(逻辑AND)、|| (逻辑OR)、! (逻辑NOT)
位运算符
位运算符对整数在内存中的二进制进行操作。
位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能。如果要开发高效率程序,位运算符是必不可少的。位运算符用来对二进制进行操作,包括:按位与(&)、按位或(|)、按位异或(^)、按位左移(<<)、按位右移(>>)
按位与
按位与(&):对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时 才为1。简单的说:同一位同时为1 则为1
按位或
按位或(|):比较两个数,然后返回一个新的数,这个数的每一位置设置1的条件是任意一个数的同一位为1 则为1。简单的说:同一位其中一个为1 则为1
按位异或
按位异或(^):比较两个数,然后返回一个数,这个数的每一位设为1的条件是两个输入数的同一位不同 则为1,如果相同就设为 0 。简单的说:同一位不相同 则为1
左移运算符(<<)
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零
- 语法格式:
- 需要移位的数字 << 移位的次数
- 例如:3 << 4,则是将 数字3 左移了4位
- 计算过程:
- 3 << 4
- 首先把 3 转换为 二进制数字 0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出。其他的数字都朝左平移4位,最后在 低位(右侧)的两个空位补零,则得到的最终结果为 0000 0000 0000 0000 0000 0000 0011 0000,则转换为十进制为 48
- 用 3 * 2 ^4 计算 更加方便,3 乘以 2 的4次方
- 数字意义
- 在数字没有溢出的前提下,对于正数 和 负数,左移一位 都相当于 乘以 2的一次方,左移 n 位就相当于 乘以2的 n 次方
右移运算符(>>)
按二进制形式把所有的数字都向右移动对应 位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数 补1
- 语法格式
- 需要移位的数字 >> 移位的次数
- 例如:11 >> 2,则是将数字 11 右移2位
- 计算过程
- 11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所有在高位补零,则得到的最终结果为 0000 0000 0000 0000 0000 0000 0000 0010,转化为十进制为2
- 用 11 / (2 ^ 2) 计算 更加方便,11 除以 2 的2次方
- 数字意义
- 右移一位相当于 除2,右移 n 位,则相当于 除以2的 n 次方
赋值运算符
赋值运算符有:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。
DEMO示例
以下是上面知识点的代码演示:
package main
import "fmt"
var a = 21.0
var b = 5.0
var c float64
func main() {
fmt.Println("算术运算符 --- start---")
Arithmetic()
fmt.Println()
fmt.Println("关系运算符 --- start---")
Relational()
fmt.Println()
fmt.Println("逻辑运算符 --- start---")
Logical()
fmt.Println()
fmt.Println("位运算符 --- start---")
Bitwise()
fmt.Println()
fmt.Println("赋值运算符 --- start---")
Assignment()
fmt.Println()
}
// 算术运算符
func Arithmetic() {
c = a + b
fmt.Printf("第一行 - c 的值为 %.2f\n", c)
c = a - b
fmt.Printf("第二行 - c 的值为 %.2f\n", c)
c = a * b
fmt.Printf("第三行 - c 的值为 %.2f\n", c)
c = a / b
fmt.Printf("第四行 - c 的值为 %.2f\n", c)
//c = a % b
fmt.Printf("第五行 - c 的值为 %d\n", int(a)%int(b))
a++
fmt.Printf("第六行 - a 的值为 %f\n", a)
a = 21
a--
fmt.Printf("第七行 - a 的值为 %f\n", a)
}
// 关系运算符
func Relational() {
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")
}
}
// 逻辑运算符
func Logical() {
a := true
b := false
if (a && b) {
fmt.Printf("第一行 - 条件为 true \n")
}
if (a || b) {
fmt.Printf("第二行 - 条件为 true \n")
}
if (!(a && b)) {
fmt.Printf("第三行 - 条件为 true \n")
}
}
// 位运算符
func Bitwise() {
fmt.Println(252 & 63)
fmt.Println(178 | 94)
fmt.Println(20 ^ 5)
fmt.Println(3 << 4) // 3 * 2 ^ 4
fmt.Println(11 >> 2) // 11 / (2 ^ 2)
}
// 赋值运算符
func Assignment() {
c = a
fmt.Printf("第1行 - =运算符实例,c的值为 %f \n", c)
c += a
fmt.Printf("第2行 - +=运算符实例,c的值为 %f \n", c)
c -= a
fmt.Printf("第3行 - -=运算符实例,c的值为 %f \n", c)
c *= a
fmt.Printf("第4行 - *=运算符实例,c的值为 %f \n", c)
c /= a
fmt.Printf("第5行 - /=运算符实例,c的值为 %f \n", c)
c = a
fmt.Printf("第6行 - =运算符实例,c的值为 %f \n", c)
d := 200
d <<= 2
fmt.Printf("第7行 - <<=运算符实例,d的值为 %d \n", d) // d = d * 2^2 = 200 * 2^2 = 800
d >>= 2
fmt.Printf("第8行 - >>=运算符实例,d的值为 %d \n", d) // d = d / (2^2) = 800 / (2^2) = 200
d &= 2
fmt.Printf("第9行 - &=运算符实例,d的值为 %d \n", d) // d = d & 2 = 0
d |= 2
fmt.Printf("第10行 - |=运算符实例,d的值为 %d \n", d) // d = d | 2 = 2
d ^= 2
fmt.Printf("第11行 - ^=运算符实例,d的值为 %d \n", d) // d = d ^ 2 = 0
}
复制代码
运行结果为:
算术运算符 --- start---
第一行 - c 的值为 26.00
第二行 - c 的值为 16.00
第三行 - c 的值为 105.00
第四行 - c 的值为 4.20
第五行 - c 的值为 1
第六行 - a 的值为 22.000000
第七行 - a 的值为 20.000000
关系运算符 --- start---
第一行 - a 不等于 b
第二行 - a 不小于 b
第三行 - a 大于 b
逻辑运算符 --- start---
第二行 - 条件为 true
第三行 - 条件为 true
位运算符 --- start---
60
254
17
48
2
赋值运算符 --- start---
第1行 - =运算符实例,c的值为 20.000000
第2行 - +=运算符实例,c的值为 40.000000
第3行 - -=运算符实例,c的值为 20.000000
第4行 - *=运算符实例,c的值为 400.000000
第5行 - /=运算符实例,c的值为 20.000000
第6行 - =运算符实例,c的值为 20.000000
第7行 - <<=运算符实例,d的值为 800
第8行 - >>=运算符实例,d的值为 200
第9行 - &=运算符实例,d的值为 0
第10行 - |=运算符实例,d的值为 2
第11行 - ^=运算符实例,d的值为 0
复制代码
欢迎关注我的公众号~ 搜索公众号: 翻身码农把歌唱 或者 扫描下方二维码: