zoukankan      html  css  js  c++  java
  • Golang的位运算操作符的使用

    &      位运算 AND
    |      位运算 OR
    ^      位运算 XOR
    &^     位清空 (AND NOT)
    <<     左移
    >>     右移

    感觉位运算操作符虽然在平时用得并不多,但是在涉及到底层性能优化或者使用某些trick的时候还是比较有意思。

    &(AND) |(OR) 就不提了最常用的东西 会编程就会。

    &操作的话是当 两个数需要同时为1的时候才会保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4

    | 操作的话是当 两个数同时为1或者1个为1一个不为1的时候会保留。 例如 0000 0100 | 0000 1111 => 0000 1111 => 15

    ^(XOR) 在go语言中XOR是作为二元运算符存在的:

    但是如果是作为一元运算符出现,他的意思是按位取反,例如

    package main
    
    import "fmt"
    
    func main() {
        x := 4
        fmt.Println(^x)
    }
    output: -5

    如果作为二元运算符则是

    package main
    
    import "fmt"
    
    func main() {
        x := 4
        y := 2
        fmt.Println(x^y)
    }
    output: 6

    XOR是不进位加法计算,也就是异或计算。0000 0100 + 0000 0010 = 0000 0110 = 6

     &^ (AND NOT)位清空运算和被运算变量位置有关系,先看一个例子:

    package main
    
    import "fmt"
    
    func main() {
    
        x := 2
        y := 4
        fmt.Println(x&^y)
    }
    output: 2

    计算x&^y 首先我们先换算成2进制  0000 0010 &^ 0000 0100 = 0000 0010 如果ybit位上的数是0则取x上对应位置的值, 如果ybit位上为1则取结果位上取0

    >>右移 <<左移 感觉右移左移应该也是非常常见的使用了 继续看例子:

    package main
    
    import "fmt"
    
    func main() {
        x := 2
        y := 4
        fmt.Println(x<<1)
        fmt.Println(y>>1)
    }
    output:4 2

    进行转化为二进制 然后向左或者向右移动。

  • 相关阅读:
    Jmeter的两种录制脚本的方式
    【.NET】设置EntityFramework中decimal类型数据精度 [转]
    vscode格式化vue不换行
    mysql5.7 noinstall 安装 【转载】
    配置STP、RSTP以及负载均衡
    配置3层交换机VLAN间通信
    配置单臂路由
    配置DTP
    配置trunk
    配置VLAN
  • 原文地址:https://www.cnblogs.com/piperck/p/6139369.html
Copyright © 2011-2022 走看看