美文网首页
07 Go运算符

07 Go运算符

作者: 亨锅锅 | 来源:发表于2018-09-19 23:01 被阅读0次

    一、算术运算符

    package main
    
    import "fmt"
    
    func main() {
        /*
        1.C语言中算数运算符有
        + - * / %  ++ --
        2.Go语言中的算数运算符和C语言一样
        + - * / %  ++ --
        并且用法都一样
         */
         /*
         res1 := 1 + 1
         fmt.Println(res1) // 2
         res2 := 1 - 1
         fmt.Println(res2) // 0
         res3 := 2 * 2
         fmt.Println(res3) // 4
         res4 := 10 / 3
         fmt.Println(res4) // 3
         res5 := 10 % 3
         fmt.Println(res5) // 1
    
         // 注意点:
         // 不同类型的常量(字面量)可以进行运算
         // 不同类型的变量不可以直接进行运算
         //res6 := 10 / 3.0
         var num1 int  = 10
         var num2 float64 = 3.0
         //var res6 float64 = num1 / num2 // 报错
         var res6 float64 = float64(num1) / num2
         fmt.Println(res6)
    
         // 注意点:
         // + 还可以用于拼接字符串
         var str1 string = "msh"
         var str2 string = "coder"
         var res7 string = str1 + str2
         fmt.Println(res7)
         // 只有相同类型才能进行运算
         //var res8 string = "msh" + 666 // 报错
         //fmt.Println(res8)
         */
    
         // ++ --
         // 注意点: Go语言中的++ -- 只能写在后面, 不能写在前面
         num := 1
         fmt.Println(num) // 1
         num++ // num = num + 1
         fmt.Println(num) // 2
         num-- // num = num - 1
         fmt.Println(num) // 1
    
         //++num // 报错
         //--num // 报错
    }
    

    二、关系运算符

    package main
    
    import "fmt"
    
    func main() {
        /*
        1.C语言中的关系运算符有
        > < >= <= == !=
        2.Go语言和C语言一样
        > < >= <= == !=
        注意点:
        在C语言中非零即真, 但是在Go语言中没有非零即真的概念
        Go语言中所有的关系运算符返回的都是true或者false
    
        关系运算符的优先级 : 记住()最高即可
         */
    
        res1 := 10 > 5
        fmt.Println(res1) // true
        res2 := 10 < 5
        fmt.Println(res2) // false
        res3 := 10 >= 5
        fmt.Println(res3) // true
        res4 := 10 <= 5
        fmt.Println(res4) // false
        res5 := 10 == 10
        fmt.Println(res5) // true
        res6 := 10 != 10
        fmt.Println(res6) // false
    }
    
    

    三、逻辑运算符

    package main
    
    import "fmt"
    
    func main() {
        /*
        1.C语言中的逻辑运算符有
        && || !
        2.Go语言和C语言一样
        && || !
    
        注意点:
        1.Go语言中的逻辑运算符返回的是true和false
        2.参与运算的表达式的返回值都必须是布尔类型才行
        表达式1 && 表达式2
        表达式1 || 表达式2
        !表达式
    
        规则:
        && 一假则假
        || 一真则真
        ! 真变假假变真
         */
    
         res1 := (10 > 5) && (1 > 1)
         //res1 := 1 && 1 // 报错, 没有非零即真的概念, &&两边必须都是布尔类型
         fmt.Println(res1) // false
    
        res2 := (10 > 5) || (1 > 1)
        //res2 := 1 || 1 // 报错, 没有非零即真的概念, ||两边必须都是布尔类型
        fmt.Println(res2) // true
    
        //res3 := !false
        //res3 := !0 // 报错, 没有非零即真的概念, !右必须是布尔类型\
        res3 := !(10 > 5)
        fmt.Println(res3)
    }
    
    

    四、位运算符

    package main
    
    import "fmt"
    
    func main() {
        /*
        1.C语言中的位运算符有
        & | ^ << >>
        2.Go语言的位运算符号C语言一样
        & | ^ << >>
        多了一个 &^
    
        3.位运算是专门用于计算二进制位的
        & 一假则假
        | 一真则真
        ^ 不同为真, 相同为假
        << 乘以2的左移多少次幂
        >> 除以2的右移多次次幂
         */
    
         /*
         按位与
         0110      a
        &1011      b
         -----
         0010
          */
        //a1 := 6
        //b1 := 11
        //res := a1 & b1
        //fmt.Println(res) // 2
    
        /*
        按位或
        0110      a
       |1011      b
        -----
        1111
         */
        //a1 := 6
        //b1 := 11
        //res := a1 | b1
        //fmt.Println(res) // 15
    
        /*
        按位异或
        0110      a
       ^1011      b
        -----
        1101
         */
        //a1 := 6
        //b1 := 11
        //res := a1 ^ b1
        //fmt.Println(res) // 13
    
        /*
        左移:
        乘以2的左移多少次幂
         */
        //num := 3
        ////    3 * 2(2) --> 3 * 4
        //num = num << 2
        //fmt.Println(num)
    
        /*
        右移:
        除以2的右移多少次幂
         */
         //num := 12
         ////     12 / 2(2) --> 12/4
         //num = num >> 2
         //fmt.Println(num)
    
         /*
         &^ 逻辑清零运算符
         如果b的二进制的当前位是1, 那么就清零
         如果b的二进制的当前位不是1, 那么就保留a对应二进制位的数据
    
            0110      a
         &^1011      b
         -----
          0100
          */
        a1 := 6
        b1 := 11
        res := a1 &^ b1
        fmt.Println(res) // 4
    }
      
    

    五、赋值运算符

    package main
    
    import "fmt"
    
    func main() {
        /*
        1.C语言中的赋值运算符有
        = += *= /= %= &= |= ^= <<= >>=
        2.Go语言中的赋值运算符和C语言一样
        = += *= /= %= &= |= ^= <<= >>=
        只不过新增了一个   &^=
    
    
         */
         var num int
         num = 10
         num += 5 // 相当于 num = num + 5
         num -= 5 // 相当于 num = num - 5
         num *= 5 // 相当于 num = num * 5
         num /= 5 // 相当于 num = num / 5
         num %= 5 // 相当于 num = num % 5
         num &= 5 // 相当于 num = num & 5
         num |= 5 // 相当于 num = num | 5
         num <<= 5 // 相当于 num = num << 5
         num >>= 5 // 相当于 num = num >> 5
         num &^= 5 // 相当于 num = num &^ 5
         fmt.Println(num)
    }
    
    

    六、其他运算符

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        /*
        1.C语言中的其它运算符
        & 取地址运算符
        * 访问地址运算符
    
        2.Go语言和C语言一样
        & 取地址运算符
        * 访问地址运算符
         */
    
         var num int
         num = 10
         // 定义一个指向int类型变量的指针
         var p *int
         // 取出num变量的内存地址, 放到指针变量p中
         p = &num
         // 访问指针指向的内存
         fmt.Println(*p)
    }
    

    相关文章

      网友评论

          本文标题:07 Go运算符

          本文链接:https://www.haomeiwen.com/subject/jebwnftx.html