zoukankan      html  css  js  c++  java
  • 8.14Go之运算符(Operator)

    8.14Go之运算符(Operator)

    Go内置运算符

    • 算术运算符

    • 关系运算符

    • 逻辑运算符

    • 位运算符

    • 赋值运算符

    • 其他运算符


    算术运算符、关系运算符、逻辑运算符因为是类C语言,所以和之前的运算符基本无异。重点介绍位运算符、赋值运算符、其他运算符

    逻辑运算符

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

    示例:

    package main

    import "fmt"

    func main() {
    a := true
    b := false
    if a && b {
    fmt.Println("第一行条件为 ture\n")
    }
    if a || b {
    fmt.Println("第二行条件为 false\n")
    }

    /*修改a和b赋值*/
    a = b
    b = true
    if a && b {
    fmt.Println("第三行条件为 true\n")
    }else {
    fmt.Println("第三行条件为 false\n")
    }
    if !(a && b) {
    fmt.Println("第四行条件为 true\n")
    }
    }
    /*
    这里体现了go语言的语法简洁性
    if后不需要硬性加"()"
    */

    位运算符

    作用:

    • 对整数在内存中的二进制位进行操作

    运算符描述
    & 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。简单理解就是将左右两边的数转成二进制数然后比较,两位都是1的时候才为1
    | 按位或运算符"|"是双目运算符,功能是参与运算的两数各对应的二进制位相或。将左右两边的数转成二进制数然后比较,两位有一位为1的时候就是1
    ^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。将左右两边的数转成二进制数然后比较,两位不一样则为1
    << 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
    >> 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。

    示例:

    package main

    import "fmt"

    func main() {
    a := 60
    b := 13
    c := 0

    c = a & b
    fmt.Println("第一行 -c 的值为 %d\n", c)

    c = a | b
    fmt.Println("第二行 -c 的值为 %d\n", c)

    c = a ^ b
    fmt.Println("第三行 -c 的值为 %d\n", c)

    c = a << 2
    fmt.Println("第四行 -c 的值为 %d\n", c)

    c = a >> 2
    fmt.Println("第五行 -c 的值为 %d\n", c)
    }

    赋值运算符

    是赋值符号 + 运算符

    运算符描述
    = 将一个表达式的值赋给一个左值
    += 相加后再赋值--->C += A 等于 C = C + A
    -= 相减后再赋值
    *= 相乘后再赋值
    /= 相除后再赋值
    %= 求余后再赋值
    <<= 左移后赋值
    >>= 右移后赋值
    &= 按位与后赋值
    ^= 按位异或后赋值
    |= 按位或后赋值--->C |=2 等于 C = C | 2

    示例:

    package main

    import "fmt"

    var (
    practiceValueNo1 int
    practiceValueNo2 int
    practiceValueNo3 int
    )

    func main() {
    practiceValueNo1, practiceValueNo2 = 60 ,13
    practiceValueNo3 = practiceValueNo1 + practiceValueNo2
    fmt.Println(practiceValueNo3)

    practiceValueNo1 += practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo1 -= practiceValueNo2 //practiceValueNo1 -= practiceValueNo2--->practiceValueNo1 = practiceValueNo1 - practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo2 = 2
    practiceValueNo1 *= practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo2 = 30
    practiceValueNo1 /= practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo2 = 16
    practiceValueNo1 %= practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo2 = 2
    practiceValueNo1 <<= practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo1 >>= practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo2 = 13
    practiceValueNo1 &= practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo1 ^= practiceValueNo2
    fmt.Println(practiceValueNo1)

    practiceValueNo1 |= practiceValueNo2
    fmt.Println(practiceValueNo1)
    }

    其他运算符--->这是go非常关键的地方(也是go与Java的不同之处)

    运算符描述实例
    & 返回变量存储地址 &a; 将给出变量的实际地址。
    * 指针变量。 *a; 是一个指针变量

    示例:

    package main

    import "fmt"

    var (
    variableValueNo1 int
    variableValueNo2 int32
    variableValueNo3 float32
    variableValueNo4 int
    pointer *int
    pointerNo2 *int32
    )

    func main() {
    variableValueNo1 = 60
    fmt.Println("第一行 -a 变量类型为 = %T\n", variableValueNo1)
    fmt.Println("第二行 -b 变量类型 = %T\n", variableValueNo2)
    fmt.Println("第三行 -c 变量类型 = %T\n", variableValueNo3)

    pointer = &variableValueNo1 //'pointer'包含了变量variableValueNo1的地址
    fmt.Println("a 的值为 %d\n", variableValueNo1)
    fmt.Println("*pointer为 %d\n", *pointer)

    /*修改pointer的指向*/
    //初始化No4
    variableValueNo4 = 30
    pointer = &variableValueNo4
    fmt.Println("变量variableValueNo4的内存地址为:\n", pointer)

    variableValueNo2 = 30
    pointerNo2 = &variableValueNo2
    fmt.Println(*pointerNo2)
    /*
    注意:
    如果在指针变量前+*符号,那么打印出来的结果是这个变量指向的地址的值对象本身
    不+*符号,打印出来的结果是值对象的地址
    */
    }

    如果我改变指针指向:

        pointer = &variableValueNo1 //'pointer'包含了变量variableValueNo1的地址
    /*如果在这改变指针的指向,那么结果为0*/
    pointer = &variableValueNo4
    fmt.Println("a 的值为 %d\n", variableValueNo1)
    fmt.Println("*pointer为 %d\n", *pointer)
    //因为我改变了pointer指针地址的指向,variableValueNo4在此时值对象为0(默认的值对象)

    输出结果:

    结果图

    注意:

    • go是强类型语言,即便同是int类型下的指针,指针变量pointer *int无法指向变量variableValueNo2 int32

  • 相关阅读:
    Oracle连接数一直在增
    ora00020: maximum number of processes (150) exeeded
    oracle归档日志满了
    C# ZPL
    error CS0227: 不安全代码只会在使用 /unsafe 编译的情况下出现
    最全zpl语言指令解析(含乱码)
    ZPL 打印机实例
    ora-01400 无法将NULL插入 ID 解决方法
    windows 选择时间控件(选择日期, 小时分钟秒)
    用户登陆检验----没有优化,大神可以帮忙优化优化
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15141440.html
Copyright © 2011-2022 走看看