运算符

Go语言内置的运算符有

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符

算术运算符

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-运算符的更多相关文章

  1. Golang语言系列-10-包

    包 自定义包 package _0calc import ( "fmt" ) /* [Go语言的包] 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基 ...

  2. Golang语言系列-11-goroutine并发

    goroutine 并发 概念 package main import ( "fmt" "time" ) /* [Go语言中的并发编程 goroutine] [ ...

  3. Golang语言系列-07-函数

    函数 函数的基本概念 package main import ( "fmt" ) // 函数 // 函数存在的意义:函数能够让代码结构更加清晰,更简洁,能够让代码复用 // 函数是 ...

  4. Golang语言系列-01-Go语言简介和变量

    Go语言简介 Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pi ...

  5. Golang语言系列-15-数据库

    数据库 MySQL 连接数据库 package main import ( "database/sql" "fmt" _ "github.com/go ...

  6. Golang语言系列-14-单元测试

    单元测试 字符串切割函数 package split_string import ( "fmt" "strings" ) // Split:切割字符串 // e ...

  7. Golang语言系列-12-网络编程

    网络编程 互联网协议介绍 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网.我们理解了这些协 ...

  8. Golang语言系列-09-接口

    接口 接口的定义和实现 package main import "fmt" /* [接口] 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现 ...

  9. Golang语言系列-08-结构体

    结构体 自定义类型和类型别名的区别 package main import "fmt" // 自定义类型和类型别名的区别 // type后面跟的是类型 type myInt int ...

随机推荐

  1. AcWing 99. 激光炸弹

    地图上有n个目标,用整数x,y表示目标在地图上的位置,每个目标都有一个价值Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含r个位置的正方形内的所有目标. 激光炸弹的投 ...

  2. 被swoole坑哭的PHP程序员 (转)

    本文主要记录一下学习swoole的过程.填过的坑以及swoole究竟有多么强大! 首先说一下对swoole的理解:披着PHP外衣的C程序.很多PHPer朋友看到swoole提供的强大功能.外界对其的崇 ...

  3. edraw max for mac 安装

    1.下载网址:https://xclient.info/s/edraw-max.html#versions 2.安装断网安装,直接打开 .dmg文件安装 3.按照阅读文件中的第二步,将opt.cell ...

  4. SwaggerHub 更快,标准化的API设计软件

    更快,标准化的API设计 在功能强大且直观的编辑器中设计API,该编辑器旨在提高速度和效率,而不会损失设计一致性. SwaggerHub帮助我们简化了设计和实现API的方式-作为一名架构师,我喜欢良好 ...

  5. netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印

    1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...

  6. Jenkins集成SonarQube遇到的报错

    Jenkins集成Sonar过程中遇到的报错 1.jenkins中无法添加sonarqube的token凭证 因为添加的凭证类型错误,所以无法添加token,类型应该选择"Secret te ...

  7. esp32 Guru Meditation 错误解决方案(转)

    Guru Meditation本节将对打印在 Guru Meditation Error: Core panic'ed后面括号中的致错原因进行逐一解释.IllegalInstruction此 CPU ...

  8. ESP32-OTA升级

    基于ESP-IDF4.1 1 #include <string.h> 2 #include "freertos/FreeRTOS.h" 3 #include " ...

  9. 对抗攻击(一) FGSM

    引言 在对抗样本综述(二)中,我们知道了几种著名的对抗攻击和对抗防御的方法.下面具体来看下几种对抗攻击是如何工作的.这篇文章介绍FGSM(Fast Gradient Sign Method). 预备知 ...

  10. 学C记录(理解递归问题之汉诺塔)

    汉诺游戏规则如下: 1.有三根相邻的柱子,标号为A,B,C. 2.A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘. 3.现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘 ...