运算符

运算符用于在程序运行时执行数学和逻辑运算
Go 语言内置的运算符有:

  • 关系运算符
  • 算数运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符

关系运算符

运算符描述实例 (假设 a = 5, b = 3)
==等于a == b 返回 false
!=不等于a != b 返回 true
>大于a > b 返回 true
<小于a < b 返回 false
>=大于等于a >= b 返回 true
<=小于等于a <= b 返回 false

代码如下:

package main

import "fmt"

func main() {
	var a int = 12
	var b int = 20
	var c bool

	c = a > b
	fmt.Println(c) // false
	c = a < b
	fmt.Println(c) // true
	c = a == b
	fmt.Println(c) // false
	c = a >= b
	fmt.Println(c) // false
	c = a <= b
	fmt.Println(c) // true
}

算数运算符

运算符描述实例 (假设 a = 5)
+相加a + 2 返回 7
-相减a - 2 返回 3
*相乘a * 2 返回 10
/相除a / 2 返回 2 (整数除法)
%取余/模a % 2 返回 1
++自增a++ 执行后 a 变为 6
--自减a-- 执行后 a 变为 4

注:

  • /除法运算符,根据数据类型不同,输出不同数据类型
  • float64 相除结果为普通除法
  • int64 相除结果为向零取整

代码如下:

package main  
  
import "fmt"  
  
func main() {  
    const a int = 12  
    const b int = 13  
    var c int  
  
    c = a + b  
    fmt.Printf("%d + %d = %d\n", a, b, c)  
    c = a - b  
    fmt.Printf("%d - %d = %d\n", a, b, c)  
    c = a * b  
    fmt.Printf("%d * %d = %d\n", a, b, c)  
    c = b / a  
    fmt.Printf("%d / %d = %d\n", b, a, c) // 常数类型为 int 型,除法算数后向零取整,抛弃小数点后  
    c = a % b  
    fmt.Printf("%d %% %d = %d\n", a, b, c)  
  
    const d float64 = 12.12  
    const e float64 = 13  
    var f float64  
  
    f = e / d  
    fmt.Printf("%.2f / %.2f = %f\n", e, d, f) // 常数类型为 float 型,除法算数后带小数点后  
  
    var g int = 5  
  
    g++  
    fmt.Printf("g = 5,g++ = %d\n", g)  
  
    g = 5 //重新赋值  
  
    g--  
    fmt.Printf("g = 5,g-- = %d\n", g)  
}

输出:

12 + 13 = 25
12 - 13 = -1
12 * 13 = 156
13 / 12 = 1
12 % 13 = 12
13.00 / 12.12 = 1.072607
g = 5,g++ = 6
g = 5,g-- = 4

逻辑运算符

运算符描述实例 (假设 a = true, b = false)
&&逻辑与 (AND)a && b 返回 false
||逻辑或 (OR)a || b 返回 true
!逻辑非 (NOT)!a 返回 false

代码如下:

package main

import "fmt"

func main() {
	// AND(&&) 同真才真;
	// OR(||) 一真则真;
	// NOT(!) 假为真,真为假;

	var a bool = true
	var b bool = false
	var c bool

	c = a && b
	fmt.Println(c) // false
	c = a || b
	fmt.Println(c) // true

	a = true
	b = true

	c = a && b
	fmt.Println(c) // true
	c = a || b
	fmt.Println(c) // true

	a = false
	b = false

	c = a && b
	fmt.Println(c) // false
	c = a || b
	fmt.Println(c) // false

	a = true
	b = false

	c = !a
	fmt.Println(c) // false
	c = !b
	fmt.Println(c) // true
}

位运算符

运算符描述实例 (假设 a = 5, b = 3) 备注:5=0101, 3=0011
&按位与 (AND)a & b 返回 1 (0101 & 0011 = 0001)
|按位或 (OR)a | b 返回 7 (0101 | 0011 = 0111)
^按位异或 (XOR)a ^ b 返回 6 (0101 ^ 0011 = 0110)
&^位清空 (AND NOT)a &^ b 返回 4 (0101 &^ 0011 = 0100)
<<左移a << 1 返回 10 (0101 << 1 = 1010)
>>右移a >> 1 返回 2 (0101 >> 1 = 0010)

代码如下:

package main

import "fmt"

func main() {
	// 按位与(&) 两位都为1才为1;
	// 按位或(|) 有一位为1则为1;
	// 按位异或(^) 两位不同则为1;
	// 位清空(&^) 若右位为1则左位清零;
	// 左移(<<) 左移n位相当于乘以2的n次方;
	// 右移(>>) 右移n位相当于除以2的n次方;

	var a uint8 = 5 // 二进制: 0101
	var b uint8 = 3 // 二进制: 0011
	var c uint8

	c = a & b
	fmt.Println(c) // 1 (0001)
	c = a | b
	fmt.Println(c) // 7 (0111)

	a = 5
	b = 3

	c = a ^ b
	fmt.Println(c) // 6 (0110)
	c = a &^ b
	fmt.Println(c) // 4 (0100)

	a = 2
	b = 1

	c = a << 1
	fmt.Println(c) // 4 (2*2)
	c = a >> 1
	fmt.Println(c) // 1 (2/2)

	a = 3
	b = 2

	c = a << 2
	fmt.Println(c) // 12 (3*4)
	c = a >> 1
	fmt.Println(c) // 1 (3/2 整数除法)
}

赋值运算符

运算符描述实例 (假设 a = 10, b = 3)
=直接赋值c = aa 的值赋给 c
+=相加并赋值a += b 等价于 a = a + b
-=相减并赋值a -= b 等价于 a = a - b
*=相乘并赋值a *= b 等价于 a = a * b
/=相除并赋值a /= b 等价于 a = a / b
%=取余并赋值a %= b 等价于 a = a % b
&=按位与并赋值a &= b 等价于 a = a & b
|=按位或并赋值a |= b 等价于 a = a | b
^=按位异或并赋值a ^= b 等价于 a = a ^ b
&^=位清空并赋值a &^= b 等价于 a = a &^ b
<<=左移并赋值a <<= 2 等价于 a = a << 2
>>=右移并赋值a >>= 2 等价于 a = a >> 2

代码如下:

package main

import "fmt"

func main() {
	// 赋值运算符
	// =   直接赋值
	// +=  相加并赋值
	// -=  相减并赋值
	// *=  相乘并赋值
	// /=  相除并赋值
	// %=  取余并赋值

	var a int = 10
	var b int = 3

	// 直接赋值 =
	var c int
	c = a
	fmt.Println(c) // 10

	// += 相加并赋值
	a = 10
	a += b
	fmt.Println(a) // 13 (10+3)

	// -= 相减并赋值
	a = 10
	a -= b
	fmt.Println(a) // 7 (10-3)

	// *= 相乘并赋值
	a = 10
	a *= b
	fmt.Println(a) // 30 (10*3)

	// /= 相除并赋值
	a = 10
	a /= b
	fmt.Println(a) // 3 (10/3)

	// %= 取余并赋值
	a = 10
	a %= b
	fmt.Println(a) // 1 (10%3)
}

其他运算符

运算符描述实例
&取地址p = &xx 的地址赋给 p
*指针解引用val = *p 获取指针 p 指向的值
<-通道操作符(发送/接收)ch <- v 发送,v := <-ch 接收
.结构体字段选择器person.name 访问 name 字段
[]数组/切片索引arr[0] 访问第一个元素
()函数调用/强制类型转换add(1,2)int(3.14)

代码如下:

package main

import "fmt"

func main() {
	// 取地址 & 和 指针解引用 *
	var x int = 10
	var p *int
	p = &x      // & 取地址
	fmt.Println(p)  // 内存地址
	fmt.Println(*p) // 10,* 解引用

	*p = 20
	fmt.Println(x) // 20

	// 通道操作符 <-
	ch := make(chan int)
	go func() {
		ch <- 42 // 发送
	}()
	val := <-ch // 接收
	fmt.Println(val) // 42

	// 结构体字段选择器 .
	type Person struct {
		Name string
		Age  int
	}
	person := Person{Name: "张三", Age: 20}
	fmt.Println(person.Name) // 张三
	fmt.Println(person.Age)  // 20

	// 数组/切片索引 []
	arr := [3]int{1, 2, 3}
	fmt.Println(arr[0]) // 1
	fmt.Println(arr[1]) // 2
	fmt.Println(arr[2]) // 3

	// 函数调用 ()
	fmt.Println("Hello") // 调用函数
	var pi float64 = float64(3) // 类型转换
	fmt.Println(pi) // 3
}

// 这个里面有一些比较发展,后面的文章会赘述
// 例如:切片,通道,指针会单独开篇
Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐