golang 运算符

目录

  • [1. golang 运算符](#1. golang 运算符)
    • [1.1. Types of Operators](#1.1. Types of Operators)
    • [1.2. Bitwise Operators (位运算符)](#1.2. Bitwise Operators (位运算符))
    • [1.3. Logical Operators (逻辑运算符)](#1.3. Logical Operators (逻辑运算符))
    • [1.4. Arithmetic Operators (算术运算符)](#1.4. Arithmetic Operators (算术运算符))
    • [1.5. Assignment Operators (赋值运算符)](#1.5. Assignment Operators (赋值运算符))
    • [1.6. Comparison Operators (比较运算符)](#1.6. Comparison Operators (比较运算符))

1. golang 运算符

1.1. Types of Operators

  1. Bitwise Operators (位运算符)
  2. Logical Operators (逻辑运算符)
  3. Arithmetic Operators (算术运算符)
  4. Assignment Operators (赋值运算符)
  5. Comparison Operators (比较运算符)

1.2. Bitwise Operators (位运算符)

go 复制代码
package main

import "fmt"

func main() {
    x := 3
    y := 5
	z := false
    // 3 -> 011
    // 5 -> 101
    fmt.Println("X AND Y = ", x & y)
    fmt.Println("X OR Y = ", x | y)
    fmt.Println("X EXOR Y = ", x ^ y)
    fmt.Println("X Right Shift 1  = ", x >> 1)
    fmt.Println("X Right Shift 2  = ", x >> 2)
    fmt.Println("Y Left Shift 1 = ", y << 1)
}
sh 复制代码
$ go run bitwise/main.go

X AND Y =  1
X OR Y =  7
X EXOR Y =  6
X Right Shift 1  =  1
X Right Shift 2  =  0
Y Left Shift 1 =  10

很多编程语言使用 ~ 作为一元按位取反(NOT)操作符, Go 重用 ^ XOR 操作符来按位取反:

go 复制代码
// 错误的取反操作
func main() {
    fmt.Println(~2) // bitwise complement operator is ^
}
 
// 正确示例
func main() {
    var d uint8 = 2
    fmt.Printf("%08b\n", d)     // 00000010
    fmt.Printf("%08b\n", ^d)    // 11111101
}

同时 ^ 也是按位异或(XOR)操作符:

go 复制代码
10000010 ^ 00000010 = 10000000

1.3. Logical Operators (逻辑运算符)

go 复制代码
package main

import "fmt"

func main() {
    a := 45
    b := "Something"
    fmt.Println(a > 40 && b == "Something")
    fmt.Println(a < 40 && b == "Something")
    fmt.Println(a < 40 || b == "Something")
    fmt.Println(a < 40 || b != "Something")
    fmt.Println(!(a < 40 || b != "Something"))
}
sh 复制代码
$ go run logical/main.go

true
false
true
false
true

1.4. Arithmetic Operators (算术运算符)

go 复制代码
package main

import "fmt"

func main() {
    a := 30
    b := 50
    fmt.Println("A + B = ", a+b)
    fmt.Println("A - B = ", a-b)
    fmt.Println("A * B = ", a*b)
    fmt.Println("A / B = ", a/b)
    fmt.Println("A % B = ", a%b)
}
sh 复制代码
$ go run arithmetic/main.go
A + B =  80
A - B =  -20
A * B =  1500
A / B =  0
A % B =  30
go 复制代码
package main

import "fmt"

func main() {
    k := 3
    j := 20
    fmt.Println("k = ", k)
    fmt.Println("j = ", j)
    k++
    j--
    fmt.Println("k = ", k)
    fmt.Println("j = ", j)
}
sh 复制代码
$ go run arithmetic/main.go

k =  3
j =  20

k =  4
j =  19

1.5. Assignment Operators (赋值运算符)

go 复制代码
package main

import "fmt"

func main() {
    var a int = 100
    b := 20
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)
    a += 30
    fmt.Println("a = ", a)
    b -= 5
    fmt.Println("b = ", b)
    a *= b
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)
    a /= b
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)
    a %= b
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)
}
sh 复制代码
$ go run assignment/main.go

a =  100
b =  20

a =  130
b =  15

a =  1950
b =  15

a =  130
b =  15

a =  10
b =  15

1.6. Comparison Operators (比较运算符)

go 复制代码
package main

import "fmt"

func main() {
    a := 45
    b := 12
    fmt.Println("Is A equal to B ? ", a == b)
    fmt.Println("Is A not equal to B ? ", a != b)
    fmt.Println("Is A greater than B ? ", a > b)
    fmt.Println("Is A less than B ? ", a < b)
    fmt.Println("Is A greater than or equal to B ? ", a >= b)
    fmt.Println("Is A less than or equal to B ? ", a <= b)
}
sh 复制代码
$ go run comparison/main.go

Is A equal to B ?  false
Is A not equal to B ?  true
Is A greater than B ?  true
Is A less than B ?  false
Is A greater than or equal to B ?  true
Is A less than or equal to B ?  false
相关推荐
陈随易1 分钟前
一行代码,将网页元素变成图片!比 html2canvas 快 93 倍的截图神器来了!
前端·后端·程序员
Kookoos1 分钟前
性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
后端·c#·.net·abp vnext·miniprofiler
Chef_Chen2 分钟前
从0开始学习R语言--Day20-ARIMA与格兰杰因果检验
开发语言·学习·r语言
掉头发的王富贵3 分钟前
Arthas神器入门:动态调试Java应用,轻松搞定生产环境Bug!
java·后端·debug
zh_xuan3 分钟前
c++ std::pair
开发语言·c++
汪子熙7 分钟前
解密 Fabric 体系 —— 架构与实践全解析
后端
oraen9 分钟前
一篇文章让你在根本上理解遗传算法,用牛刀杀鸡-使用遗传撕力扣
后端
程序员爱钓鱼10 分钟前
Go语言并发模型与模式:Worker Pool 模式
后端·go·排序算法
Victor35611 分钟前
MySQL(66)如何进行慢查询日志分析?
后端
程序小武11 分钟前
深入理解Python内置模块及第三方库的使用与管理
后端