Go 语言编程 — 运算符

Dear 丶 2023-10-06 12:26 80阅读 0赞

目录

文章目录

  • 目录
  • 运算符
  • 赋值运算符
  • 算术运算符
  • 逻辑运算符
  • 关系运算符
  • 位运算符
  • 指针运算符、取值运算符和取址运算符
  • 运算符优先级
  • … 语法糖

运算符

Golang 内置的运算符包括:

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

赋值运算符

在这里插入图片描述

算术运算符

在这里插入图片描述

注意:Golang 的自增,自减只能作为表达式使用,而不能用于赋值语句,例如:

  1. a++ // 这是允许的,等同于 a = a + 1
  2. a--
  3. a = a++ // 这是不允许的,会出现变异错误 syntax error: unexpected ++ at end of statement

逻辑运算符

在这里插入图片描述

关系运算符

在这里插入图片描述

位运算符

位运算符对整数在内存中的二进制位进行操作。

在这里插入图片描述
在这里插入图片描述

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var a uint = 60 /* 60 = 0011 1100 */
  5. var b uint = 13 /* 13 = 0000 1101 */
  6. var c uint = 0
  7. c = a & b /* 12 = 0000 1100 */
  8. fmt.Printf("第一行 - c 的值为 %d\n", c )
  9. c = a | b /* 61 = 0011 1101 */
  10. fmt.Printf("第二行 - c 的值为 %d\n", c )
  11. c = a ^ b /* 49 = 0011 0001 */
  12. fmt.Printf("第三行 - c 的值为 %d\n", c )
  13. c = a << 2 /* 240 = 1111 0000 */
  14. fmt.Printf("第四行 - c 的值为 %d\n", c )
  15. c = a >> 2 /* 15 = 0000 1111 */
  16. fmt.Printf("第五行 - c 的值为 %d\n", c )
  17. }

指针运算符、取值运算符和取址运算符

“*” 与数据类型预留标识符结合使用时,表示一个指针变量;其余则表示一个取值运算符,取出指针指向的内存数据值。

在这里插入图片描述

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var a int = 4
  5. var b int32
  6. var c float32
  7. var ptr *int // 定义一个整型指针变量 ptr
  8. /* 运算符实例 */
  9. fmt.Printf("第 1 行 - a 变量类型为 = %T\n", a);
  10. fmt.Printf("第 2 行 - b 变量类型为 = %T\n", b);
  11. fmt.Printf("第 3 行 - c 变量类型为 = %T\n", c);
  12. /* & 和 * 运算符实例 */
  13. ptr = &a // 'ptr' 包含了 'a' 变量的地址
  14. fmt.Printf("a 的值为 %d\n", a);
  15. fmt.Printf("ptr 为 %d\n", ptr); // 取的整型指针变量 ptr 的地址值
  16. fmt.Printf("*ptr 为 %d\n", *ptr); // 取的整型指针变量 ptr 指向的数据值
  17. }

结果:

  1. 1 - a 变量类型为 = int
  2. 2 - b 变量类型为 = int32
  3. 3 - c 变量类型为 = float32
  4. a 的值为 4
  5. ptr 824634458120
  6. *ptr 4

运算符优先级

表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低。
在这里插入图片描述

其中,二元运算符的运算方向均是从左至右:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var a int = 20
  5. var b int = 10
  6. var c int = 15
  7. var d int = 5
  8. var e int
  9. e = (a + b) * c / d // ( 30 * 15 ) / 5
  10. fmt.Printf("(a + b) * c / d 的值为 : %d\n", e)
  11. e = ((a + b) * c) / d // (30 * 15 ) / 5
  12. fmt.Printf("((a + b) * c) / d 的值为 : %d\n" , e)
  13. e = (a + b) * (c / d) // (30) * (15/5)
  14. fmt.Printf("(a + b) * (c / d) 的值为 : %d\n", e)
  15. e = a + (b * c) / d // 20 + (150/5)
  16. fmt.Printf("a + (b * c) / d 的值为 : %d\n" , e)

… 语法糖

是 Golang 的一种语法糖:

  1. 用于函数的变长形参列表。
  2. 用于打散 Slice 类型变量的元素,类似于 Python 中的 List.extend(散列合并两个列表)。

示例 1:

  1. // 传入一个可变长的形参列表,args 实际上是 Slice 类型的。
  2. func test(args ...string) {
  3. for _, v:= range args{
  4. fmt.Println(v)
  5. }
  6. }

示例 2:

  1. var strss1= []string{
  2. "qwr",
  3. "234",
  4. "yui",
  5. }
  6. var strss2= []string{
  7. "qqq",
  8. "aaa",
  9. "zzz",
  10. "zzz",
  11. }
  12. strss=append(strss1, strss2...) // strss2 的元素会被打散,并一个个的 append 到 strss1
  13. fmt.Println(strss1)

结果:

  1. [qwr 234 yui qqq aaa zzz zzz]

发表评论

表情:
评论列表 (有 0 条评论,80人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Go语言运算符

    `一.原码、反码、补码` > 位运算时,需要知道几个概念,原码、反码、补码.正数在计算机中二进制还是原值,负数在计算机中存储的是补码 > 原码 >

    相关 Go语言运算符

    Go语言运算符 [GO语言学习教程][GO] [www.lsdcloud.com][] 运算符用于在程序运行时执行数学或逻辑运算。 Go 语言内置的运算符有:

    相关 Go语言笔记--常量与运算符

    1.常量的定义 1)常量的值再编译时就已经确定 2)常量的定义格式与变量基本相同 3)等号右侧必须是常量或者常量表达式 4)常量表达式中的函数必须是内置函数 例如