zoukankan      html  css  js  c++  java
  • Golang的运算符-位运算符

              Golang的运算符-位运算符

                                 作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

     

     

     

    一.位运算符概述

      常见的位逻辑运算符:
        &:
          位与运算符,表示AND(表示所有条件都得匹配),运算规则为相同位都是1时结果才为1,不同则为0。举个例子:如"5 & 7",结果为5。
          计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位与运算,相同位都是1时结果才为1,最终得到结果二进制结果0000 0101,使用十进制表示为5。
    
        |:
          位或运算符,表示OR(表示有一个条件匹配即可),运算规则为相同位只要一个为1则为1。举个例子:如"5 | 7",结果为7。
          计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位或运算,相同位只要一个为1时结果才为1,最终得到结果0000 0111。使用十进制表示为7。
    
        ^:
          位异或运算符,表示XOR,运算规则为相同位不同则为1,相同则为0。举个例子:如"5 ^ 7",结果为2。
          计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位异或运算,相同位不同则为1,相同则为0,最终得到结果0000 0010。使用十进制表示为2。
        
    &^:       位清空运算符,表示AND NOT,运算规则为后数为0,则用前数对应位代替,后数为1则取0。举个例子:如"5 ^ 7",结果为0。       计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位清空运算符,为后数为0,则用前数对应位代替,后数为1则取0,最终得到结果0000 0000。使用十进制表示为0。   
      常见的位移运算符:     
    <<:       左移,表示将对应的二进制数字向左移动相应的位数,比如 5 << 3,结果为40。       计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,将二进制数字向左位移3位得到0010 1000,使用十进制表示为"40"
        
    >>:       右移,表示将对应的二进制数字向右移动相应的位数,比如 5 >> 3,结果为1。       计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,将二进制数字向左位移3位得到0000 0001,使用十进制表示为"1"

     

    二.位运算符实战案例

    1>.位逻辑运算符案例

    package main
    
    import (
        "fmt"
    )
    
    func main() {
    
        a := 5 //对应二进制为:    0000 0101
        b := 7 //对应二进制为:    0000 0111
    
        fmt.Printf("变量a对应的二进制值是:[%b]
    ", a)
        fmt.Printf("变量b对应的二进制值是:[%b]
    ", b)
    
        /*
                &:
                    位与运算符,表示AND(表示所有条件都得匹配),运算规则为相同位都是1时结果才为1,不同则为0。举个例子:如"5 & 7",结果为5。
    
                |:
                    位或运算符,表示OR(表示有一个条件匹配即可),运算规则为相同位只要一个为1则为1。举个例子:如"5 | 7",结果为7。
    
              ^:
                位异或运算符,表示XOR,运算规则为相同位不同则为1,相同则为0。举个例子:如"5 ^ 7",结果为2。
    
              &^:
                位清空运算符,表示AND NOT,运算规则为后数为0,则用前数对应位代替,后数为1则取0。举个例子:如"5 ^ 7",结果为0。
        */
        fmt.Printf("a & b = [%d]
    ", (a & b))
        fmt.Printf("a | b = [%d]
    ", (a | b))
        fmt.Printf("a ^ b = [%d]
    ", (a ^ b))
        fmt.Printf("a &^ b = [%d]
    ", (a &^ b))
    
    }

    2>.位移运算符

    package main
    
    import (
        "fmt"
    )
    
    func main() {
    
        a := 5 //对应二进制为:    0000 0101
    
        fmt.Printf("变量a对应的二进制值是:[%b]
    ", a)
    
        /*
            <<:
                左移,表示将对应的二进制数字向左移动相应的位数,比如 5 << 3,结果为40。
    
            >>:
                右移,表示将对应的二进制数字向右移动相应的位数,比如 5 >> 3,结果为1。
        */
    
        fmt.Printf("5 << 3 = [%d]
    ", 5<<3)
        fmt.Printf("5 >> 3 = [%d]
    ", 5>>3)
    
    }

     

  • 相关阅读:
    【转】iOS:AvPlayer设置播放速度不生效的解决办法
    【转】 Android xml中 @和?区别,style和attr小结
    【转】Android 旋转动画,停止和持续旋转
    【转】Android SDK,ADT,API 版本的对应关系
    【转】说说Android中的style和theme
    【转】 Android中selector的使用
    【转】[置顶] 在Android中显示GIF动画
    mysql if case条件更新
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12257801.html
Copyright © 2011-2022 走看看