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
相关推荐
_.Switch7 分钟前
Python 自动化运维持续优化与性能调优
运维·开发语言·python·缓存·自动化·运维开发
徐*红8 分钟前
java 线程池
java·开发语言
尚学教辅学习资料8 分钟前
基于SSM的养老院管理系统+LW示例参考
java·开发语言·java毕设·养老院
2401_857636398 分钟前
计算机课程管理平台:Spring Boot与工程认证的结合
java·spring boot·后端
1 9 J10 分钟前
Java 上机实践4(类与对象)
java·开发语言·算法
Code apprenticeship11 分钟前
Java面试题(2)
java·开发语言
J不A秃V头A13 分钟前
Python爬虫:获取国家货币编码、货币名称
开发语言·爬虫·python
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
SRY122404193 小时前
javaSE面试题
java·开发语言·面试
__AtYou__3 小时前
Golang | Leetcode Golang题解之第557题反转字符串中的单词III
leetcode·golang·题解