Golang运算符
golang 2023-10-17 09:45:41

内置的运算符:

1. 算术运算符

2. 关系运算符

3. 逻辑运算符

4. 位运算符

5. 赋值运算符

 

1. 算术运算符

运算符 描述
+ 相加
- 相减
* 相乘
/ 相除
% 求余

注意:++ (自增)和 -- (自减)在Go语言中是单独的语句,并不是运算符

示例:

PHP Code复制内容到剪贴板
  1. package main  
  2.   
  3. import "fmt"  
  4.   
  5. func main() {  
  6.   
  7.     a := 100  
  8.     b := 10  
  9.   
  10.     fmt.Printf("(a + b): %v\n", (a + b))  
  11.     fmt.Printf("(a - b): %v\n", (a - b))  
  12.     fmt.Printf("(a * b): %v\n", (a * b))  
  13.     fmt.Printf("(a / b): %v\n", (a / b))  
  14.     fmt.Printf("(a %% b): %v\n", (a % b))  
  15.   
  16.     a++  
  17.     fmt.Printf("a: %v\n", a)  
  18.   
  19.     b--  
  20.     fmt.Printf("b: %v\n", b)  
  21. }  

 

输出:

(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复制内容到剪贴板
  1. a := 10  
  2. b := 5  
  3. r := a == b // 第一次声明变量需要加 : 号  
  4. fmt.Printf("r: %v\n", r)  
  5.   
  6. r = a != b  
  7. fmt.Printf("r: %v\n", r)  
  8.   
  9. r = a > b  
  10. fmt.Printf("r: %v\n", r)  
  11.   
  12. r = a >= b  
  13. fmt.Printf("r: %v\n", r)  
  14.   
  15. r = a < b  
  16. fmt.Printf("r: %v\n", r)  
  17.   
  18. r = a <= b  
  19. 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复制内容到剪贴板
  1. a := true  
  2. b := false  
  3.   
  4. r := a && b  
  5.   
  6. fmt.Printf("r: %v\n", r)  
  7.   
  8. r = a || b  
  9. fmt.Printf("r: %v\n", r)  
  10. 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复制内容到剪贴板
  1. package main  
  2.   
  3. import "fmt"  
  4.   
  5. func main() {  
  6.     a := 5 // 0101  
  7.     b := 6 // 0110  
  8.   
  9.     fmt.Println(a & b)  // 4  
  10.     fmt.Println(a | b)  // 7  
  11.     fmt.Println(a ^ b)  // 3  
  12.     fmt.Println(a >> 1) // 2  
  13.     fmt.Println(a << 1) // 10  
  14. }  

 

分析:

C/C++ Code复制内容到剪贴板
  1. a --转换成二进制--> 0101  
  2. b -- 转换成二进制--> 0110  
  3.              0101  
  4. a & b --->   0110   
  5.            --------  
  6.              0100  ---> 转换成十进制为 4  
  7.            
  8.              0101  
  9. a | b --->   0110   
  10.            --------  
  11.              0111  ---> 转换成十进制为 7  
  12.   
  13.              0101  
  14. a ^ b --->   0110   
  15.            --------  
  16.              0011  ---> 转换成十进制为 3  
  17.                
  18. a >> 1 ---> 0101 ---> 所有位向右(后)移动一位,在最前面补0 ---> 0010  ---> 转换成十进制 2  
  19.   
  20. a << 1 ---> 0101 ---> 所有位向左(前)移动一位,在最后面补0 ---> 1010  ---> 转换成十进制 10  

 

注意,对于位的移动操作,如果超过原本数据类型的长度,只会从后往前保留对应的位数,如:

PHP Code复制内容到剪贴板
  1. package main  
  2.   
  3. import "fmt"  
  4.   
  5. func main() {  
  6.     a := int8(1) // 定义一个八位的整数  
  7.     fmt.Println(a << 10) // 0  
  8. }  

 

分析:

C/C++ Code复制内容到剪贴板
  1. a<<1 ---> 00000001 ---> 所有位向左移动十位在最后面补0 ---> 10000000000 ---> 但是a最长只能是八位,多以只能从右往左保留八位,00000000,转换成十进制结果为0  

 

示例:有一堆数字,如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?

思路:可以使用异或运算操作,0 与任何数值异或的结果都为值本身,相同的值异或结果为 0

PHP Code复制内容到剪贴板
  1. package main  
  2.   
  3. import "fmt"  
  4.   
  5. func main() {  
  6.     nums := [...]int{1, 1, 2, 3, 2}  
  7.     obj := 0  
  8.     for _, v := range nums {  
  9.         obj ^= v  
  10.     }  
  11.     fmt.Println(obj)  
  12. }  

 

 

5. 赋值运算符

运算符 描述
= 简单的赋值运算符,将一个表达式的值赋给一个左值
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异或后赋值

 

 

 

 

 

 

本文来自于:https://blog.csdn.net/cdc_tr/article/details/129482562

Powered by yoyo苏ICP备15045725号