Golang语言系列-04-运算符
运算符
Go语言内置的运算符有
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
算术运算符
package main
import "fmt"
func main() {
	var (
		a = 5
		b = 2
	)
	// 算术运算符
	fmt.Println(a + b) // 加
	fmt.Println(a - b) // 减
	fmt.Println(a * b) // 乘
	fmt.Println(a / b) // 除
	fmt.Println(a % b) // 取余
	// ++(自增) 和 --(自减) 在Go语言中是单独的语句,并不是运算符
	// a++ // 单独的语句 --> a=a+1
	// b-- // 单独的语句 --> b=b-1
}
结果
lichengguo@lichengguodeMacBook-Pro 04operator % go run test.go
7
3
10
2
1
关系运算符
package main
import "fmt"
func main() {
	var (
		a = 5
		b = 2
	)
	// 关系运算符
	// Go语言是强类型语言,只有相同类型的变量才能比较
	fmt.Println(a == b) // 等于
	fmt.Println(a != b) // 不等于
	fmt.Println(a >= b) // 大于等于
	fmt.Println(a <= b) // 小于等于
	fmt.Println(a > b)  // 大于
	fmt.Println(a < b)  // 小于
	fmt.Println("---- 分隔符 ----")
	// 字符也可以比较
	c1 := '中'
	c2 := '国'
	fmt.Printf("==%c\n", c1)    // 中
	fmt.Println("=", c1)        // 20013
	fmt.Println("==", c2)       // 2 2269
	fmt.Println("===", c1 < c2) // 底层是int32类型,所以可以比较
	fmt.Printf("%T\n", c1)      // int32
}
结果
lichengguo@lichengguodeMacBook-Pro 04operator % go run test.go
false
true
true
false
true
false
---- 分隔符 ----
==中
= 20013
== 22269
=== true
int32
逻辑运算符
package main
import "fmt"
func main() {
	// 逻辑运算符
	// && 逻辑AND运算符 如果两边的操作数都是 True,则为 True,否则为 False
	// || 逻辑OR运算符  如果两边的操作数有一个 True,则为 True,否则为 False
	// !  逻辑NOT运算符 如果条件为 True,则为 False,否则为 True。
	// 如果年龄大于18岁 并且 并且小于60岁 &&
	age := 22
	if age > 18 && age < 60 {
		fmt.Println("上班族")
	} else {
		fmt.Println("不上班")
	}
	// 如果年龄小于18岁 或者 年龄大于60岁 ||
	if age < 18 || age > 60 {
		fmt.Println("不上班")
	} else {
		fmt.Println("work")
	}
	// not取反,原来为真就假,原来为假就真 !
	isMarried := false
	fmt.Println(!isMarried)
}
结果
lichengguo@lichengguodeMacBook-Pro 04operator % go run test.go
上班族
work
true
位运算符
package main
import "fmt"
func main() {
	// 位运算:针对的是二进制数
	// 5的二进制表示:0101
	// 2的二进制表示:0010
	// &:按位与(两位均为1才为1)
	fmt.Println(5 & 2)
	// |:按位或(两位有一个为1就为1)
	fmt.Println(5 | 2)
	// ^:按位异或(两位不一样则为1)
	fmt.Println(5 ^ 2)
	// <<:将二进制位左移指定位数
	fmt.Println(5 << 1)  // 将5左移1位 0101 => 10100 = 10
	fmt.Println(1 << 10) // 将1左移10位 1 => 10000000000 = 1024
	// >>:将二进制位右移指定的位数
	fmt.Println(5 >> 2)
	var m = int8(1)      // 只能存8位
	fmt.Println(m << 10) // 因为int8 只能存储8位,向左移10位的话,就位0了
}
lichengguo@lichengguodeMacBook-Pro 04operator % go run test.go
0
7
7
10
1024
1
0
赋值运算符
package main
func main() {
	// 赋值运算符,用来给变量赋值的
	var x int
	x = 10 // 简单的赋值运算符,将一个表达式的值赋给一个左值
	x += 1 //x = x + 1 相加后再赋值
	x -= 1 //x = x - 1 相减后再赋值
	x *= 2 //x = x * 2 相乘后再赋值
	x /= 2 //x = x / 2 相除后再赋值
	x %= 2 //x = x % 2 求余后再赋值
	x <<= 2 //x = x << 2 左移后赋值
	x &= 2  //x = x & 2 按位与后赋值
	x |= 3  //x = x | 3 按位或后赋值
	x ^= 4  //x = x ^ 4 按位异或后赋值
	x >>= 2 //x = x >> 2 右移后赋值
}
小练习
有一堆数字,如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?
例如:123432155
package main
import (
	"fmt"
)
func main() {
	// ^ 按位异或(两位不一样则为1)
	s := [9]int64{1, 2, 3, 4, 3, 2, 1, 5, 5}
	fmt.Println(s[0] ^ s[1] ^ s[2] ^ s[3] ^ s[4] ^ s[5] ^ s[6] ^ s[7] ^ s[8]) // 4
}
Golang语言系列-04-运算符的更多相关文章
- Golang语言系列-10-包
		包 自定义包 package _0calc import ( "fmt" ) /* [Go语言的包] 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基 ... 
- Golang语言系列-11-goroutine并发
		goroutine 并发 概念 package main import ( "fmt" "time" ) /* [Go语言中的并发编程 goroutine] [ ... 
- Golang语言系列-07-函数
		函数 函数的基本概念 package main import ( "fmt" ) // 函数 // 函数存在的意义:函数能够让代码结构更加清晰,更简洁,能够让代码复用 // 函数是 ... 
- Golang语言系列-01-Go语言简介和变量
		Go语言简介 Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pi ... 
- Golang语言系列-15-数据库
		数据库 MySQL 连接数据库 package main import ( "database/sql" "fmt" _ "github.com/go ... 
- Golang语言系列-14-单元测试
		单元测试 字符串切割函数 package split_string import ( "fmt" "strings" ) // Split:切割字符串 // e ... 
- Golang语言系列-12-网络编程
		网络编程 互联网协议介绍 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网.我们理解了这些协 ... 
- Golang语言系列-09-接口
		接口 接口的定义和实现 package main import "fmt" /* [接口] 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现 ... 
- Golang语言系列-08-结构体
		结构体 自定义类型和类型别名的区别 package main import "fmt" // 自定义类型和类型别名的区别 // type后面跟的是类型 type myInt int ... 
随机推荐
- acwing 890. 能被整除的数
			#include<bits/stdc++.h> #define ll long long using namespace std; int m; int n,p[20]; int sum, ... 
- CentOS-配置jar包自启动(SpringBoot)
			在pom.xml文件<plugin>中添加配置后,再打包(开发人员) <plugin> <groupId>org.springframework.boot& ... 
- (转) PHP实现从1累加到100(1+2+….+100=)的几种思路,挺有意思的!!!
			一个经典的小学问题也是一个简单的PHP小应用,1+2+3--100=多少?使用PHP应该怎么写? 这里总结了以下几种思路: 1.普通PHPer: $sum=0;for($i=1;$i<=100; ... 
- linux学习之路第六天(文件目录类第二部分)
			文件目录类 1.cat指令 作用:查看文件内容,是以只读的方式打开. 基本语法 cat [选项] 要查看的文件 常用选项 -n; 使用细节: cat只能浏览文件,而不能修改文件,通常会和more一起使 ... 
- 了解Javascript中函数作为对象的魅力
			前言 Javascript赋予了函数非常多的特性,其中最重要的特性之一就是将函数作为第一型的对象.那就意味着在javascript中函数可以有属性,可以有方法, 可以享有所有对象所拥有的特性.并且最重 ... 
- buu crackRTF
			一.无壳,拖入ida,静态编译一下 整体逻辑还是很清晰,这里我的盲区是那个加密函数,是md5,没看出来,内存地址看错了,之前用黑盒动调一下,发现猜不出来,看某位wp发现有的老哥,直接sha1爆破的,狠 ... 
- rz上传文件报错:rpm  Read  Signature failed: sigh blob(1268): BAD, read returned 0
			上传文件报错: [root@www localdisk]# rpm -ivh cobbler* error: cobbler-2.8.4-4.el7.x86_64.rpm: rpm Read Si ... 
- ZYNQ 中PS端GPIO EMIO使用
			ZYNQ 中PS端GPIO EMIO使用 在使用ZYNQ进行开发设计时,往往需要对一些GPIO引脚进行配置,传统的配置方法通常在PL端进行管脚约束之后在Verilog代码中对相应引脚进行配置.这样如果 ... 
- ESP-IDF硬件设计相关知识
			1.更新ESP-IDF:直接删除您本地的 esp-idf 文件夹,然后克隆新版本:更新完成后,请执行 install.sh (Windows 系统中为 install.bat)脚本,避免新版 ESP- ... 
- 家庭账本开发day05
			套用layUI模板,成功完成账单的添加,并且能同时对用户的余额进行增加和减少 
