• Go的运算符解密:探索计算的奥秘


    目录

    算术运算符

    赋值运算符

    比较运算符

    逻辑运算符

    位运算符

    其他运算符

    运算符优先级

    代码示例


    图片

    更多关于Go的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

    图片

    原文:Go的运算符解密:探索计算的奥秘

    本篇文章我将总结介绍下Go语言中关于运算符的知识点。

    图片

    Go语言中的运算符用于执行各种数学和逻辑操作。本文我将详细介绍Go语言中常用的运算符,包括算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符、位运算符和其他运算符。

    算术运算符

    Go语言中的算术运算符用于执行基本的数学运算,如加法、减法、乘法和除法。

    1. 加法运算符(+):用于将两个操作数相加,如a + b。

    2. 减法运算符(-):用于将第一个操作数减去第二个操作数,如a - b。

    3. 乘法运算符(*):用于将两个操作数相乘,如a * b。

    4. 除法运算符(/):用于将第一个操作数除以第二个操作数,如a / b。

    5. 取余运算符(%):用于获取两个操作数相除的余数,如a % b。

    赋值运算符

    赋值运算符用于将一个值赋给变量。

    1. 简单赋值运算符(=):将右边的值赋给左边的变量,如a = b,简单的赋值运算符,将一个表达式的值赋给一个左值。

    2. 加法赋值运算符(+=):将右边的值与左边的变量相加,并将结果赋给左边的变量(相加后再赋值),如a += b。

    3. 减法赋值运算符(-=):将右边的值与左边的变量相减,并将结果赋给左边的变量(相减后再赋值),如a -= b。

    4. 乘法赋值运算符(*=):将右边的值与左边的变量相乘,并将结果赋给左边的变量(相乘后再赋值),如a *= b。

    5. 除法赋值运算符(/=):将左边的变量除以右边的值,并将结果赋给左边的变量(相除后再赋值),如a /= b。

    6. 取余赋值运算符(%=):将左边的变量除以右边的值的余数,并将结果赋给左边的变量(求余后再赋值),如a %= b。

    7. <<=:左移后赋值。

    8. >>=:右移后赋值。

    9. &=:按位与后赋值。

    10. l=:按位或后赋值。

    11. ^=:按位异或后赋值。

    比较运算符

    比较运算符用于比较两个值的大小或相等性。

    1. 相等运算符(==):判断两个值是否相等,如a == b,如果相等返回 True 否则返回 False。

    2. 不等运算符(!=):判断两个值是否不相等,如a != b,如果不相等返回 True 否则返回 False。

    3. 大于运算符(>):判断第一个值是否大于第二个值,如a > b,如果是返回 True 否则返回 False。

    4. 小于运算符(<):判断第一个值是否小于第二个值,如a < b,如果是返回 True 否则返回 False。

    5. 大于等于运算符(>=):判断第一个值是否大于等于第二个值,如a >= b,如果是返回 True 否则返回 False。

    6. 小于等于运算符(<=):判断第一个值是否小于等于第二个值,如a <= b,如果是返回 True 否则返回 False。

    逻辑运算符

    逻辑运算符用于对布尔值进行逻辑运算。

    1. 逻辑与运算符(&&):逻辑 AND 运算符。判断两个布尔值是否都为真,如果两边的操作数都是 True,则为 True,否则为 False。如a && b。

    2. 逻辑或运算符(||):逻辑 OR 运算符。判断两个布尔值是否至少有一个为真,如果两边的操作数有一个 True,则为 True,否则为False。如a || b。

    3. 逻辑非运算符(!):逻辑 NOT 运算符。对布尔值进行取反操作,如果条件为 True,则为 False,否则为True。如!a。

    位运算符

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

    1. 按位与运算符(&):对两个整数的每个位进行与操作,如a & b,参与运算的两数各对应的二进位相与。(两位均为1才为1)。

    2. 按位或运算符(|):对两个整数的每个位进行或操作,如a | b,参与运算的两数各对应的二进位相或。(两位有一个为1就为1)。

    3. 按位异或运算符(^):对两个整数的每个位进行异或操作,如a ^ b,参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(两位不一样则为1)。

    4. 左移运算符(<<):将一个整数的每个位向左移动指定的位数,如a << b,左移n位就是乘以2的n次方。“a<

    5. 右移运算符(>>):将一个整数的每个位向右移动指定的位数,如a >> b,右移n位就是除以2的n次方。“a>>b”是把a的各二进位全部右移b位。

    其他运算符

    除了上述常用的运算符,Go语言还提供了其他一些特殊的运算符。

    1. 地址运算符(&):用于获取变量的内存地址,如&a。

    2. 指针运算符(*):用于声明指针变量或通过指针间接访问变量,如*ptr。

    3. 自增运算符(++):将变量的值增加1,如a++。

    4. 自减运算符(--):将变量的值减少1,如a--。

    注意:

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

    Go不支持这种三目运算符,Python中支持,条件运算符(?:):根据条件选择不同的值,如a > b ? a : b。

    运算符优先级

    以下是Go语言中运算符的优先级顺序(从高到低):

    1. 括号:()

    2. 单目运算符:+(正号)、-(负号)、!(逻辑非)、^(按位取反)

    3. 乘法和除法运算符:*(乘法)、/(除法)、%(取模)

    4. 加法和减法运算符:+(加法)、-(减法)

    5. 位运算符:<<(左移)、>>(右移)、&(按位与)、|(按位或)、^(按位异或)

    6. 关系运算符:==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)

    7. 逻辑运算符:&&(逻辑与)、||(逻辑或)

    8. 位清空运算符:&^(按位清零)

    9. 赋值运算符:=、+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=、&^=

    10. 逗号运算符:,

    需要注意的是,运算符的优先级决定了表达式中运算符的结合性和计算顺序。如果表达式中有多个运算符,优先级高的运算符会先进行计算。如果优先级相同的运算符出现在同一表达式中,根据结合性从左到右或从右到左进行计算。

    代码示例

    1. package main
    2. import "fmt"
    3. /*
    4. Go没有三元操作符
    5. !和<-可以用于一元和二元操作符来使用
    6. <-接收操作符
    7. 7个算术操作符只能作用于整数:%、&、|、^、&^、<<、>>
    8. = 用于将一个值赋给一个已被声明的变量或常量
    9. := 用于在声明一个变量的同时对这个变量进行赋值,且只能在函数体内使用
    10. ++、--是语句不是表达式
    11. *p-- 等同于 (*p)--
    12. */
    13. func operator01() {
    14. //+ 连接符
    15. //只会创建并使用一个新的字符串值来保存操作结果,而不会改变任何操作数的值
    16. fmt.Println("Hello" + "GoLang" + "!")
    17. var str1 string = "Numbers:"
    18. fmt.Println(str1)
    19. fmt.Println(str1 + string(111)) //Numbers:o Python中OK
    20. // fmt.Println(str1+111) error 字符串和数字不能使用连接符
    21. //取出变量str1的地址
    22. fmt.Println(&str1)
    23. //根据地址取出值
    24. fmt.Println(*&str1)
    25. // <- 接收操作符
    26. // 用于通道类型的值
    27. /*
    28. 从一个通道类型的空值nil 接收值的表达式将会永远被阻塞
    29. 从一个已被关闭的通道类型值接收值会永远成功并立即返回一个其元素类型的零值
    30. 一个由接收操作符和通道类型的操作数所组成的表达式可以直接被用于变量赋值或初始化
    31. */
    32. // <- ch
    33. // v1 := <-ch
    34. // v2 = <-ch
    35. // v, ok = <-ch
    36. // v, ok := <-ch
    37. // 通过同时对两个变量进行赋值或初始化 第二个变量将会是一个bool类型的值 表示接受操作的成功与否,可以通过它来判断一个通道是否已被关闭,如果值为false 就表示通道已关闭
    38. }
    39. func operator02() {
    40. num1 := 5
    41. num2 := 9
    42. //num1 > num2 ? num1 : num2 // Go不支持这种写法
    43. fmt.Println(num1 + num2)
    44. fmt.Println(num1 - num2)
    45. fmt.Println(num1 * num2)
    46. fmt.Println(num1 / num2)
    47. fmt.Println(num1 % num2)
    48. num2 <<= 2
    49. fmt.Println(num2)
    50. num2 >>= 2
    51. fmt.Println(num2)
    52. num2 &= 2
    53. fmt.Println(num2)
    54. num2 |= 2
    55. fmt.Println(num2)
    56. num2 ^= 2
    57. fmt.Println(num2)
    58. /* outputs
    59. 14
    60. -4
    61. 45
    62. 0
    63. 5
    64. 36
    65. 9
    66. 0
    67. 2
    68. 0
    69. */
    70. }
    71. func operator03() {
    72. //关系运算符
    73. num1 := 11
    74. num2 := 11
    75. num3 := 0
    76. isEqual := num1 == num2
    77. isNotEqual := num1 != num2
    78. isLess := num1 < num3
    79. isLessOrEqual := num1 <= num2
    80. fmt.Println(isEqual) // true
    81. fmt.Println(isNotEqual) // true
    82. fmt.Println(isLess) // true
    83. fmt.Println(isLessOrEqual) // true
    84. // 逻辑运算符
    85. addr := &num1 // 取变量num1的地址
    86. result := *addr // 解引用变量addr,得到变量num1的值
    87. fmt.Println(addr, result) // 0xc00001c098 11
    88. typeOfAddr := reflect.TypeOf(addr)
    89. typeOfResult := reflect.TypeOf(result)
    90. fmt.Println(typeOfAddr, typeOfResult) // *int int
    91. }

    以上是Go语言中常用的运算符及其用法。运算符是编程语言中非常基础和重要的概念,熟练掌握运算符的使用可以帮助我们进行各种数学和逻辑操作。

    更多精彩,关注我公号,一起学习、成长

    推荐阅读:

  • 相关阅读:
    【论文阅读】DALL·E: Zero-Shot Text-to-Image Generation
    vue 动态引入js
    Java客户端调用Websocket服务端(Springboot)
    【JAVA】Java实现rpc框架所需方法(类似Dubbo)
    2022-08-30 第六小组 瞒春 学习笔记
    驱动程序开发:I2C设备驱动
    设计模式学习(十九):访问者模式
    微信小程序前后端交互与WXS的应用
    python创建虚拟环境及相关配置(windows环境下)
    Himall商城Web帮助类 获得http请求数据
  • 原文地址:https://blog.csdn.net/zhouruifu2015/article/details/133795637