Golang的运算符

运算符

运算符用于在程序运行时执行数学和逻辑运算

Go 语言内置的运算符有:

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

关系运算符

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

代码如下:

go 复制代码
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 相除结果为向零取整

代码如下:

go 复制代码
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)  
}

输出:

go 复制代码
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

代码如下:

go 复制代码
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)
^ 按位异或 (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)

代码如下:

go 复制代码
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 <<= 2 等价于 a = a << 2
>>= 右移并赋值 a >>= 2 等价于 a = a >> 2

代码如下:

go 复制代码
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)

代码如下:

go 复制代码
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
}

// 这个里面有一些比较发展,后面的文章会赘述
// 例如:切片,通道,指针会单独开篇
相关推荐
皮皮林5511 小时前
Dubbo 的 SPI 和 JDK 的 SPI 有什么区别?
后端
码界索隆2 小时前
Python转Java系列:前言
java·开发语言·python
金銀銅鐵2 小时前
用 Tkinter 实现一个罗马数字转整数的简单工具
后端·python
asdfg12589632 小时前
一文理解Java中的泛型
java·开发语言
河阿里2 小时前
Spring Boot:整合Quartz集群部署指南
java·spring boot·后端
Hiter_John2 小时前
Golang的变量常量初始化
开发语言·后端·golang
砍材农夫2 小时前
物联网实战:Spring Boot MQTT | 模拟器Paho客户端拆解高性能
java·javascript·spring boot·后端·物联网·struts
电商API_180079052472 小时前
免 TOP 入驻,第三方淘宝商品详情 API 快速接入与代码示例
java·大数据·开发语言·数据库·爬虫·数据分析
c238563 小时前
C++列表初始化与变量类型推导
开发语言·c++