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
相关推荐
疯狂的挖掘机9 分钟前
记一次基于QT的图片操作处理优化思路(包括在图上放大缩小,截图,画线,取值等)
开发语言·数据库·qt
cnxy18814 分钟前
围棋对弈Python程序开发完整指南:步骤4 - 提子逻辑和劫争规则实现
开发语言·python·机器学习
NAGNIP22 分钟前
多个 GitHub 账户SSH 密钥配置全攻略
后端
NAGNIP26 分钟前
Windows命令行代码自动补全详细步骤
后端
意趣新31 分钟前
C 语言源文件从编写完成到最终生成可执行文件的完整、详细过程
c语言·开发语言
追逐时光者1 小时前
精选 8 款 .NET 开源、前后端分离的快速开发框架,提高开发生产效率!
后端·.net
李艺为1 小时前
根据apk包名动态修改Android品牌与型号
android·开发语言
用户47949283569152 小时前
性能提升 4000%!我是如何解决 运营看板 不能跨库&跨库查询慢这个难题的
数据库·后端·postgresql
黄河滴滴2 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
老华带你飞2 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端