c语言编程笔录

首页 >   > 笔记大全

笔记大全

Go 语言中的运算符的特点是什么

更新时间:2023-11-13

Go语言运算符的特点

Go语言作为一门静态类型的编程语言,提供了丰富的运算符支持,运算符在Go中的使用与其他的编程语言类似,但在Go中,运算符也有一些自己的特点:

  • Go语言中的运算符可以分为算数运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、其他运算符等几类。
  • Go语言中的运算符是左结合的,即从左向右依次计算,除了赋值运算符“=”外,它是右结合的。
  • Go语言中的运算符支持重载,一个运算符可以对应多个不同类型的操作数,这个特性使得Go语言的语义更加灵活。
  • Go语言中不支持三目运算符,但可以通过if语句来实现三目运算符的效果。

算数运算符

算数运算符主要用于执行基本的算术操作,包括加法、减法、乘法、除法和取余操作;其中,“+”运算符还可以作为字符串的连接符使用,示例如下:

package main

import "fmt"

func main() {
    var a, b, c int = 2, 3, 0
    c = a + b
    fmt.Printf("a + b = %d\n", c)
    
    c = a - b
    fmt.Printf("a - b = %d\n", c)
    
    c = a * b
    fmt.Printf("a * b = %d\n", c)
    
    c = a / b
    fmt.Printf("a / b = %d\n", c)
    
    c = a % b
    fmt.Printf("a %% b = %d\n", c)
    
    var str1, str2 string = "hello", "world"
    fmt.Println(str1 + str2)
}

比较运算符

比较运算符主要用于比较两个值的大小关系,包括等于、不等于、大于、小于、大于等于和小于等于。比较运算符的结果是布尔值,即true或false。示例如下:

package main

import "fmt"

func main() {
    var a, b int = 2, 3
    fmt.Printf("a == b 为 %t\n", a == b)
    fmt.Printf("a != b 为 %t\n", a != b)
    fmt.Printf("a > b 为 %t\n", a > b)
    fmt.Printf("a < b 为 %t\n", a < b)
    fmt.Printf("b >= a 为 %t\n", b >= a)
    fmt.Printf("b <= a 为 %t\n", b <= a)
}

逻辑运算符

逻辑运算符主要用于对逻辑表达式求值,包括逻辑与、逻辑或和逻辑非。逻辑运算符的结果也是布尔值,即true或false。示例如下:

package main

import "fmt"

func main() {
    var a, b bool = true, false
    fmt.Printf("a && b 为 %t\n", a && b)
    fmt.Printf("a || b 为 %t\n", a || b)
    fmt.Printf("!a 为 %t\n", !a)
}

位运算符

位运算符主要用于对二进制数进行位操作,包括按位与、按位或、按位异或和位移操作。位运算符常用于系统底层、网络编程和算法设计等领域,示例如下:

package main

import "fmt"

func main() {
    var a, b uint8 = 60, 13
    fmt.Printf("a & b 的结果为 %d\n", a&b)
    fmt.Printf("a | b 的结果为 %d\n", a|b)
    fmt.Printf("a ^ b 的结果为 %d\n", a^b)
    fmt.Printf("a << 2 的结果为 %d\n", a<<2)
    fmt.Printf("a >> 2 的结果为 %d\n", a>>2)
}

赋值运算符

赋值运算符主要用于给变量赋值,包括基本赋值、加等于、减等于、乘等于、除等于、取模等于、按位与等于、按位或等于和按位异或等式子。示例如下:

package main

import "fmt"

func main() {
    var a, b int = 21, 10
    var c int

    c = a
    fmt.Printf("基本赋值运算符,c 的值为 %d\n", c)

    c += a
    fmt.Printf("加等于运算符,c 的值为 %d\n", c)

    c -= a
    fmt.Printf("减等于运算符,c 的值为 %d\n", c)

    c *= a
    fmt.Printf("乘等于运算符,c 的值为 %d\n", c)

    c /= a
    fmt.Printf("除等于运算符,c 的值为 %d\n", c)

    c = 200
    c %= a
    fmt.Printf("取模等于运算符,c 的值为 %d\n", c)

    c <<= 2
    fmt.Printf("按位与等于运算符,c 的值为 %d\n", c)

    c ^= a
    fmt.Printf("按位或等于运算符,c 的值为 %d\n", c)

    c >>= 2
    fmt.Printf("按位异或等于运算符,c 的值为 %d\n", c)
}

其他运算符

Go语言还提供了一些其他的运算符,包括地址运算符、指针运算符和取值运算符等等。这些运算符虽然用途不如其他的运算符广泛,但在某些场景下依然具有很重要的作用。示例如下:

package main

import "fmt"

func main() {
    var a int = 20
    var ip *int

    ip = &a
    fmt.Printf("a 变量的地址是: %x\n", &a)

    fmt.Printf("ip 变量存储的指针地址: %x\n", ip)
    fmt.Printf("*ip 变量的值: %d\n", *ip)

    var ptr *int
    fmt.Printf("ptr 的值为 : %x\n", ptr)

    if ptr == nil {
        fmt.Printf("ptr 是空指针\n")
    }

    var ptr1 int = 10
    var ptr2 *int
    ptr2 = &ptr1

    fmt.Printf("ptr1 的值为 : %d\n", ptr1)
    fmt.Printf("*ptr2 的值为 : %d\n", *ptr2)
}