• 运算符 - Go语言从入门到实战


    运算符 - Go语言从入门到实战

    算术运算符

    假设A变量等于10,B变量等于20。

    运算符描述实例
    +相加A + B 输出结果 30
    -相减A - B 输出结果 -10
    *相乘A * B 输出结果 200
    /相除B / A 输出结果 2
    %求余B % A 输出结果 0
    ++⾃增A++ 输出结果 11
    ⾃减A-- 输出结果 9

    特性:Go 语⾔没有前置的 ++,–。不允许 ++a 这种写法,Go语言遵循更严格的语法规则,不允许在变量名之前直接使用++或–。如果你想增加或减少一个变量的值,必须使用赋值运算符(如+=或-=)或者是普通的加法或减法运算符。可以写成a = a + 1或者a += 1。

    ⽐较运算符

    操作符检查两个值是否相等示例结果
    ==检查两个值是否相等,如果相等返回 True,否则返回 False。False
    !=检查两个值是否不相等,如果不相等返回 True,否则返回 False。True
    >检查左边值是否大于右边值,如果左边值大于右边值返回 True,否则返回 False。False
    <检查左边值是否小于右边值,如果左边值小于右边值返回 True,否则返回 False。True
    >=检查左边值是否大于或等于右边值,如果左边值大于或等于右边值返回 True,否则返回 False。False
    <=检查左边值是否小于或等于右边值,如果左边值小于或等于右边值返回 True,否则返回 False。True

    这些比较简单,拎一个讲讲:
    ⽤ == ⽐较数组

    1. 相同维数且含有相同个数元素的数组才可以⽐较
    2. 每个元素都相同的才相等
    package main  
    import "fmt"  
    func main() {  
        array1 := [3]int{1, 2, 3}  
        array2 := [3]int{1, 2, 3}  
        array3 := [3]int{4, 5, 6}  
        array4 := [3]int{4, 5, '6'}  
      
        fmt.Println(array1 == array2) // 输出: true  
        fmt.Println(array1 == array3) // 输出: false  
        fmt.Println(array3 == array4) // 输出: false  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    逻辑运算符

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

    位运算符

    运算符描述实例
    &按位与运算符"&"是双⽬运算符。 其功能是参与运算的两数各对应的⼆进位相与。(A & B) 结果为 12, ⼆进制为 0000 1100
    |按位或运算符"|"是双⽬运算符。 其功能是参与运算的两数各对应的⼆进位相或。(A | B) 结果为 61, ⼆进制为 0011 1101
    ^按位异或运算符"^"是双⽬运算符。 其功能是参与运算的两数各对应的⼆进位相异或,当两对应的⼆进位相异时,结果为1。(A ^ B) 结果为 49, ⼆进制为 0011 0001
    <<左移运算符”<<“是双⽬运算符。左移 n 位就是乘以 2 的 n 次⽅。 其功能把”<<“左边的运算数的各⼆进位全部左移若⼲位,由”<<"右边的数指定移动的位数,高位丢弃,低位补0。A << 2 结果为 240 ,⼆进制为 1111 0000
    >>右移运算符”>>“是双⽬运算符。右移 n 位就是除以 2 的 n 次⽅。 其功能是把”>>“左边的运算数的各⼆进位全部右移若⼲位,”>>"右边的数指定移动的位数。A >> 2 结果为 15 ,⼆进制为 0000 1111

    与其他主要编程语⾔的差异

    &^ 按位置零
    1 &^ 0 – 1
    1 &^ 1 – 0
    0 &^ 1 – 0
    0 &^ 0 – 0

    package operator_test
    import "testing"
    
    const (
    	Readable = 1 << iota
    	Writable
    	Executable
    )
    
    func TestCompareArray(t *testing.T) {
    	a := [...]int{1, 2, 3, 4}
    	b := [...]int{1, 3, 2, 4}
    	//	c := [...]int{1, 2, 3, 4, 5}
    	d := [...]int{1, 2, 3, 4}
    	t.Log(a == b)
    	//t.Log(a == c)
    	t.Log(a == d)
    }
    
    func TestBitClear(t *testing.T) {
    	a := 7 //0111
    	a = a &^ Readable
    	a = a &^ Executable
    	t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    可能这里会对十进制数转二进制数有疑惑,举个例子:

    将一个十进制数转换为二进制数,可以使用以下方法:

    1. 将十进制数除以 2,得到商和余数。
    2. 将商再次除以 2,得到新的商和余数。
    3. 不断重复上述步骤,直到商为 0。
    4. 将每一步的余数从低位到高位依次排列,得到二进制表示。

    下面是将十进制数 61 转换为二进制数的步骤:

    1. 61 ÷ 2 = 30 余 1
    2. 30 ÷ 2 = 15 余 0
    3. 15 ÷ 2 = 7 余 1
    4. 7 ÷ 2 = 3 余 1
    5. 3 ÷ 2 = 1 余 1
    6. 1 ÷ 2 = 0 余 1

    将每一步的余数从低位到高位依次排列,得到 61 的二进制表示为 0011 1101或111101。


    学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。

    欢迎关注云尔Websites CSDN博客

    欢迎进入Golang交流社区

  • 相关阅读:
    国产化正在成为超融合市场的重要发展方向之一
    12大自媒体推广平台整理
    最新解决谷歌翻译无法使用的教程
    SpringCloudStreamkafka接收jsonarray字符串失败
    [MT8766][Android12] 增加应用安装白名单或者黑名单
    学习Java的第九天
    eslint+prettier 配置
    手机cpu架构查看及armeabi、armeabi-v7a、arm64-v8a及x86等说明
    信我,ThreadPoolExecutor经典面试问题就在这~
    yarn安装私有依赖包,报错unexpected end of file问题
  • 原文地址:https://blog.csdn.net/wuchengzeng/article/details/133324822