go基础语法之运算符

go基础语法之运算符

go运算符

算术运算

运算符 作用
+ 相加
- 相减
* 乘法
/ 除法
% 取余数

关系运算

运算符 作用
== 判断是否相等,相等返回true
!= 判断是否不等,不等返回true
> 是否大于右边,是返回true
>= 是否大于等于右边,是返回true
< 是否小于右边,是返回true
<= 是否小于等于右边,是返回true

逻辑运算

运算符 作用
&& 逻辑与,两边都真,才为真
|| 逻辑或,两边有一个真,就为真
! 逻辑非,对表达式取反,表达式是真,就为假,反之亦然

位运算

对整数型,在内存中的二进制形式,进行操作

运算符 作用
& 参与运算的两数,每个二进制位相与,(1与1才是1)
| 参与运算的两数,每个二进制位相或,(有一个1,就是1)
^ 每个二进制位异或,2位不同结果是1,2位相同结果是0
<< 左移n位,就是乘以2的N次方(a<<b,a的每个二进制位左移b位,高位丢弃,低位补0
>> 右移n位,除以2的n次方(a>>b a的每个二进制位右移b位)

赋值运算

运算符 作用
= 将右边的值,赋给左边
+= 相加后赋值
-+ 相减后赋值
*= 相乘后赋值
/= 相除后赋值
%= 求余后赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异或后赋值

练习

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

原理:异或运算的三条特性

  • 任何数与0异或,结果都是其本身;
  • 任何数与本身异或,结果都是0;
  • 异或运算,满足,交换律、结合律
  • 0与0异或,结果也是0

demo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
	"fmt"
)

// 异或运算的应用
func main() {
	a := [...]int{1, 2, 3, 3, 2, 1, 6, 9, 8, 8, 6} // 应该找出的是9

	n := a[0]
	for i := 1; i < len(a); i++ {
		n ^= a[i]
	}
// 第一次循环:n= a[0]^a[1]
// 第二次循环:n= a[0]^a[1]^a[2]
// ...
// 最后一次循环:n= a[0]^a[1]^a[2]...^a[10]
// 根据异或运算的,交换律,结合律,所有出现2次的数据,先结合,结果是0,然后0与0异或还是0,最后剩一个只出现一次的数据,和0异或,是它本身,所以n最后的值,就是哪个出现了一次的数据,打印即可;
    
	fmt.Println(n)
}
D:\workstation\mycode\gocode\src\learngo\basic_grammar\03_data_type>03_data_type.exe
9
updatedupdated2020-12-282020-12-28
加载评论