• Go的运算符


    1 算术运算符

    运算符

    术语

    示例

    结果

    +

    10 + 5

    15

    -

    10 - 5

    5

    *

    10 * 5

    50

    /

    10 / 5

    2(值取整数位,要想带小数为,则10.0/5=2.0)

    %

    取模(取余)

    10 % 3

    1(取模公式:a-a/b*b)

    ++

    后自增,没有前自增

    (单独语句,并不是运算符)

    a=0; a++

    a=1

    --

    后自减,没有前自减

    (单独语句,并不是运算符)

    a=2; a--

    a=1

    2 关系运算符

    运算符

    术语

    示例

    结果

    ==

    相等于

    4 == 3

    false

    !=

    不等于

    4 != 3

    true

    小于

    4 < 3

    false

    大于

    4 > 3

    true

    <=

    小于等于

    4 <= 3

    false

    >=

    大于等于

    4 >= 1

    true

    3 逻辑运算符

    运算符

    术语

    示例

    结果

    !

    !a

    如果a为假,则!a为真;

    如果a为真,则!a为假。

    &&

    a && b

    如果a和b都为真,则结果为真,否则为假。

    ||

    a || b

    如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

    package main
    
    import "fmt"
    
    func main(){
        fmt.Println("4>3 结果:", 4>3)
        fmt.Println("4!=3 结果", 4!=3)
    
        fmt.Println("!(4>3) 结果:", !(4>3))
        fmt.Println("!(4!=3) 结果", !(4!=3))
    
        //&& 与,并且, 左边右边都为真,结果才为真
        fmt.Println("true && true 结果:", true && true)
        fmt.Println("true && false 结果:", true && false)
    
        // || 或 左边和右边都为假的时候,结果才为假,其他都为真
        fmt.Println("true || false 结果:", true || false)
        fmt.Println("false || false 结果:", false || false)
    
        a := 10
        // fmt.Println("0<a<=10 结果为:", 0<a<=10)  //go中不支持这种连写,python支持
        fmt.Println("0<a && a <=10 的结果:", 0<a && a <=10)
    }

    4 位运算符

    运算符

    术语

    说明

    示例

    &

    按位与

    参与运算的两数各对应的二进位相与(两位都为1则为1)

    60 & 13 结果为12

    |

    按位或

    参与运算的两数各对应的二进位相或(两位有一个为1就为1)

    60 | 13 结果为61

    ^

    异或

    参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1(两位不一样则为1)

    60 ^ 13 结果为240

    << 

    左移

    左移n位就是乘以2的n次方。
    “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。

    4 << 2 结果为16

    >> 

    右移

    右移n位就是除以2的n次方。
    “a>>b”是把a的各二进位全部右移b位。

    4 >> 2 结果为1

    //权限设计
    
    100   ---4  r
    010   ---2  w
    001   ---1  x
    
    100|010 = 110   //增加权限
    110&100 = 100   //验证权限
    110^100 = 010   // 删除权限
    const (
            _  = iota
            KB = 1 << (10 * iota)
            MB = 1 << (10 * iota)
            GB = 1 << (10 * iota)
            TB = 1 << (10 * iota)
            PB = 1 << (10 * iota)
        )

    5 赋值运算符

    运算符

    说明

    示例

    =

    普通赋值

    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

    6 其他运算符

    运算符

    术语

    示例

    说明

    &

    取地址运算符

    &a

    变量a的地址

    *

    取值运算符

    *a

    指针变量a所指向内存的值

    7 运算符优先级

    在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。

    下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

    优先级

    运算符

    7

    ^      !  

    6

    *       /    %    <<    >>    &      &^

    5

    +      -     |      ^

    4

    ==   !=   <    <=    >=    >

    3

    <-

    2

    &&

    1

    ||

    练习题:

    有一堆数字,其他数字都出现了两次,只有一个出现了一次,找出这个数字

    func main() {
        var ret int
        s1 := [...]int{1,1,2,2,3,4,4,5,6,5,6}
        for _,i := range s1{
            ret ^= i
        }
        fmt.Println(ret)
    }
  • 相关阅读:
    经典解析23 种设计模式
    如何用手机赚钱——admob
    解决solaris zfs文件系统内存占用过高
    在运行suncluster的数据库服务器上遇到oracle故障的解决办法
    对oracle用户进行资源限制
    Linux下TortoiseGit 配置管理环境搭建
    Linux系统非root帐号执行ssh发生Segmentation fault错误
    Solaris的panic故障分析
    转: Linux下单网卡多vlan多虚拟机
    oracle故障快速定位
  • 原文地址:https://www.cnblogs.com/huiyichanmian/p/11360946.html
Copyright © 2020-2023  润新知