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
相关推荐
BanyeBirth3 分钟前
C++高精度算法(加、减、乘)
开发语言·c++·算法
cong_9 分钟前
🌟摸鱼 TV 搭建属于自己的视频站
前端·后端·github
Aerkui10 分钟前
Python面向对象-开闭原则(OCP)
开发语言·python·开闭原则
bobz96511 分钟前
内网网络 rp_filter 参数配置
后端
"_rainbow_"14 分钟前
Qt中的鼠标事件
开发语言·qt
开心就好202517 分钟前
【机器学习】用户手机使用行为分析
后端
zwrlj52719 分钟前
编码能效插件SmartInputPro插件扩展
后端
加瓦点灯21 分钟前
从阻塞到 Reactor:理解 Java I/O 背后的架构思维
后端
zzzzz36921 分钟前
服务器返回前端Long类型精度丢失
后端
缘来的精彩22 分钟前
kotlin 多个fragment beginTransaction容器添加使用
android·开发语言·kotlin