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)

}

 

原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12257801.html