Golang运算符
内置的运算符:
1. 算术运算符
2. 关系运算符
3. 逻辑运算符
4. 位运算符
5. 赋值运算符
1. 算术运算符
运算符 | 描述 |
---|---|
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除 |
% | 求余 |
注意:++ (自增)和 -- (自减)在Go语言中是单独的语句,并不是运算符
示例:
PHP Code复制内容到剪贴板
- package main
- import "fmt"
- func main() {
- a := 100
- b := 10
- fmt.Printf("(a + b): %v\n", (a + b))
- fmt.Printf("(a - b): %v\n", (a - b))
- fmt.Printf("(a * b): %v\n", (a * b))
- fmt.Printf("(a / b): %v\n", (a / b))
- fmt.Printf("(a %% b): %v\n", (a % b))
- a++
- fmt.Printf("a: %v\n", a)
- b--
- fmt.Printf("b: %v\n", b)
- }
输出:
(a + b): 110
(a - b): 90
(a * b): 1000
(a / b): 10
(a % b): 0
a: 101
b: 9
2. 关系运算符
运算符 | 描述 |
---|---|
== | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
示例:
PHP Code复制内容到剪贴板
- a := 10
- b := 5
- r := a == b // 第一次声明变量需要加 : 号
- fmt.Printf("r: %v\n", r)
- r = a != b
- fmt.Printf("r: %v\n", r)
- r = a > b
- fmt.Printf("r: %v\n", r)
- r = a >= b
- fmt.Printf("r: %v\n", r)
- r = a < b
- fmt.Printf("r: %v\n", r)
- r = a <= b
- fmt.Printf("r: %v\n", r)
输出:
r: false
r: true
r: true
r: true
r: false
r: false
3. 逻辑运算符
运算符 | 描述 |
---|---|
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 |
|| | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 |
! | 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 |
示例:
PHP Code复制内容到剪贴板
- a := true
- b := false
- r := a && b
- fmt.Printf("r: %v\n", r)
- r = a || b
- fmt.Printf("r: %v\n", r)
- fmt.Printf("a: %v\n", !a)
输出:
r: false
r: true
a: false
4. 位运算符
运算符 | 描述 |
---|---|
& | 参与运算的两数各对应的二进位相与。 (两位均为1才为1) |
| | 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1) |
^ | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1) |
<< | 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
>> | 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。 |
示例:
PHP Code复制内容到剪贴板
- package main
- import "fmt"
- func main() {
- a := 5 // 0101
- b := 6 // 0110
- fmt.Println(a & b) // 4
- fmt.Println(a | b) // 7
- fmt.Println(a ^ b) // 3
- fmt.Println(a >> 1) // 2
- fmt.Println(a << 1) // 10
- }
分析:
C/C++ Code复制内容到剪贴板
- a --转换成二进制--> 0101
- b -- 转换成二进制--> 0110
- 0101
- a & b ---> 0110
- --------
- 0100 ---> 转换成十进制为 4
- 0101
- a | b ---> 0110
- --------
- 0111 ---> 转换成十进制为 7
- 0101
- a ^ b ---> 0110
- --------
- 0011 ---> 转换成十进制为 3
- a >> 1 ---> 0101 ---> 所有位向右(后)移动一位,在最前面补0 ---> 0010 ---> 转换成十进制 2
- a << 1 ---> 0101 ---> 所有位向左(前)移动一位,在最后面补0 ---> 1010 ---> 转换成十进制 10
注意,对于位的移动操作,如果超过原本数据类型的长度,只会从后往前保留对应的位数,如:
PHP Code复制内容到剪贴板
- package main
- import "fmt"
- func main() {
- a := int8(1) // 定义一个八位的整数
- fmt.Println(a << 10) // 0
- }
分析:
C/C++ Code复制内容到剪贴板
- a<<1 ---> 00000001 ---> 所有位向左移动十位在最后面补0 ---> 10000000000 ---> 但是a最长只能是八位,多以只能从右往左保留八位,00000000,转换成十进制结果为0
示例:有一堆数字,如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?
思路:可以使用异或运算操作,0 与任何数值异或的结果都为值本身,相同的值异或结果为 0
PHP Code复制内容到剪贴板
- package main
- import "fmt"
- func main() {
- nums := [...]int{1, 1, 2, 3, 2}
- obj := 0
- for _, v := range nums {
- obj ^= v
- }
- fmt.Println(obj)
- }
5. 赋值运算符
运算符 | 描述 |
---|---|
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
|= | 按位或后赋值 |
^= | 按位异或后赋值 |
本文来自于:https://blog.csdn.net/cdc_tr/article/details/129482562
上一篇 Golang格式化输出
下一篇 Golang中的流程控制