04-Go语言基础之运算符

运算符也就是常见的如数学运算,加减乘除,以及一些逻辑运算的符号。

Go语言支持的运算符有

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

算术运算符

运算符 描述
+ 相加
- 相减
* 相乘
/ 相除
% 求余

注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。

package main

import "fmt"

func main() {
    a := 22
    b := 10
    var c int

    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)

    // ++ 自增1
    a++
    fmt.Printf("a自增后:%d\n", a)

    a--
    a--
    fmt.Printf("a自减两次后:%d\n", a)

}

/*
结果
a,b之和=32
a-b=12
a*b=220
a*b=2
a%b=2
a自增后:23
a自减两次后:21


*/

关系运算符

下表列出了所有Go语言的关系运算符。

假定 A 值为 10,B 值为 20。

运算符 描述 实例
== 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B) 为 False
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 (A != B) 为 True
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 (A > B) 为 False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 (A < B) 为 True
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 (A >= B) 为 False
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 (A <= B) 为 True
package main

import "fmt"

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

    if a == b {
        fmt.Printf("第一行 - a 等于 b\n")
    } else {
        fmt.Printf("第一行 - a 不等于 b\n")
    }

    if a < b {
        fmt.Printf("第二行 - a 小于 b\n")
    } else {
        fmt.Printf("第二行 - a 不小于 b\n")
    }

    if a > b {
        fmt.Printf("第三行 - a 大于 b\n")
    } else {
        fmt.Printf("第三行 - a 不大于 b\n")
    }

    /* Lets change value of a and b */
    a = 5
    b = 20
    if a <= b {
        fmt.Printf("第四行 - a 小于等于 b\n")
    }
    if b >= a {
        fmt.Printf("第五行 - b 大于等于 a\n")
    }
}
/*
第一行 - a 不等于 b
第二行 - a 不小于 b
第三行 - a 大于 b
第四行 - a 小于等于 b
第五行 - b 大于等于 a

 */

逻辑运算符

下表列出了所有Go语言的逻辑运算符。假定 A 值为 True,B 值为 False。

运算符 描述 实例
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 (A && B) 为 False
\ \ 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 (A \ \ B) 为 True
! 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !(A && B) 为 True
package main

import "fmt"

func main() {
    var a bool = true
    var b bool = false
    if a && b {
        fmt.Printf("第一行 - 条件为 true\n")
    }
    if a || b {
        fmt.Printf("第二行 - 条件为 true\n")
    }
    /* 修改 a 和 b 的值 */
    a = false
    b = true
    if a && b {
        fmt.Printf("第三行 - 条件为 true\n")
    } else {
        fmt.Printf("第三行 - 条件为 false\n")
    }
    if !(a && b) {
        fmt.Printf("第四行 - 条件为 true\n")
    }
}

/*
第二行 - 条件为 true
第三行 - 条件为 false
第四行 - 条件为 true

*/

赋值运算符

下表列出了所有Go语言的赋值运算符。

运算符 描述 实例
= 简单的赋值运算符,将一个表达式的值赋给一个左值 C = A + B 将 A + B 表达式结果赋值给 C
+= 相加后再赋值 C += A 等于 C = C + A
-= 相减后再赋值 C -= A 等于 C = C - A
*= 相乘后再赋值 C = A 等于 C = C A
/= 相除后再赋值 C /= A 等于 C = C / A
%= 求余后再赋值 C %= A 等于 C = C % A
<<= 左移后赋值 C <<= 2 等于 C = C << 2
>>= 右移后赋值 C >>= 2 等于 C = C >> 2
&= 按位与后赋值 C &= 2 等于 C = C & 2
^= 按位异或后赋值 C ^= 2 等于 C = C ^ 2
\ = 按位或后赋值 C \ = 2 等于 C = C \ 2
package main

import "fmt"

func main() {
    var a int = 21
    var c int

    c = a // 21
    fmt.Printf("第 1 行  =  运算符实例,c 值为 = %d\n", c)

    c += a // c=c+a  42
    fmt.Printf("第 2 行  += 运算符实例,c 值为 = %d\n", c)

    c -= a // c=c-a  21
    fmt.Printf("第 3 行  -= 运算符实例,c 值为 = %d\n", c)

    c *= a //  c=c*a   21*21
    fmt.Printf("第 4 行  *= 运算符实例,c 值为 = %d\n", c)

    c /= a
    fmt.Printf("第 5 行  /= 运算符实例,c 值为 = %d\n", c)

    // 如下基于二进制的操作,可以先不看,一般只有go源码库里底层操作会见到
    c = 200

    c <<= 2
    fmt.Printf("第 6行  <<= 运算符实例,c 值为 = %d\n", c)

    c >>= 2
    fmt.Printf("第 7 行 >>= 运算符实例,c 值为 = %d\n", c)

    c &= 2
    fmt.Printf("第 8 行 - &= 运算符实例,c 值为 = %d\n", c)

    c ^= 2
    fmt.Printf("第 9 行 - ^= 运算符实例,c 值为 = %d\n", c)

    c |= 2
    fmt.Printf("第 10 行 - |= 运算符实例,c 值为 = %d\n", c)

}

/*
第 1 行  =  运算符实例,c 值为 = 21
第 2 行  += 运算符实例,c 值为 = 42
第 3 行  -= 运算符实例,c 值为 = 21
第 4 行  *= 运算符实例,c 值为 = 441
第 5 行  /= 运算符实例,c 值为 = 21
第 6行  <<= 运算符实例,c 值为 = 800
第 7 行 >>= 运算符实例,c 值为 = 200
第 8 行 - &= 运算符实例,c 值为 = 0
第 9 行 - ^= 运算符实例,c 值为 = 2
第 10 行 - |= 运算符实例,c 值为 = 2

*/
Copyright © www.yuchaoit.cn 2025 all right reserved,powered by Gitbook作者:于超 2022-12-23 15:17:56

results matching ""

    No results matching ""