Golang位运算符


本文摘自网络,作者,侵删。

package main

import "fmt"

func main() {
    // 正数的源码 反码 补码 一致
    // 2的源码 0000 0010 反码 0000 0010 补码 0000 0010
    // 负数的源码符号位为1 反码=符号位不变, 其他位取反 补码=反码+1
    // -2的源码 1000 0010 反码 1111 1101 补码 1111 1110
    // 0的源码 反码 补码都是0

    // 1.按位与&:两位全为1, 结果为1, 否则为0
        // 2&3
            // 2的源码 0000 0010 反码 0000 0010 补码 0000 0010
            // 3的源码 0000 0011 反码 0000 0011 补码 0000 0011
            // 2&3 = 0000 0010
    fmt.Println("2&3:", 2&3)
    // 2.按位或|:两位有一位为1, 结果为1, 否则为0
        // 2|3
            // 2的源码 0000 0010 反码 0000 0010 补码 0000 0010
            // 3的源码 0000 0011 反码 0000 0011 补码 0000 0011
            // 2|3 = 0000 0011
    fmt.Println("2|3:", 2|3)
    // 3.按位异或^:两位有一位为1, 一位为0, 结果为1, 否则为0
        // 2^3
            // 2的源码 0000 0010 反码 0000 0010 补码 0000 0010
            // 3的源码 0000 0011 反码 0000 0011 补码 0000 0011
            // 2^3 = 0000 0001
    fmt.Println("2^3:", 2^3)
        // -2^2
            // -2的源码 1000 0010 反码 1111 1101 补码 1111 1110
            // 2的源码  0000 0010 反码 0000 0010 补码 0000 0010
            // -2^2 = 1111 1100<补码>->1111 1011<反码>->1000 0100<源码>
    fmt.Println("-2^2:", -2^2)
    // 4.左移运算符 <<: 符号位不变, 高位溢出, 低位补0
        // 2 << 2
            // 2的源码  0000 0010 反码 0000 0010 补码 0000 0010
            // 2 << 2 = 0000 1000
    fmt.Println("2<<2:", 2<<2)
        // -2 << 2
            // -2的源码 1000 0010 反码 1111 1101 补码 1111 1110
            // -2 << 2 = 1111 1000<补码>-> 1111 0111<反码>->1000 1000<源码> = -8
    fmt.Println("-2<<2:", -2<<2)
    // 5.又移运算符 >>: 符号位不变, 低位溢出, 并用符号位补溢出的高位
        // 2 >> 2
            // 2的源码  0000 0010 反码 0000 0010 补码 0000 0010
            // 2 >> 2 = 0000 0000 = 0
    fmt.Println("2>>2:", 2>>2)
        // -2 >> 2
            // -2的源码 1000 0010 反码 1111 1101 补码 1111 1110
            // -2 >> 2 = 1111 1111<补码>->1111 1110<反码>-> 1000 0001<源码> = -1
    fmt.Println("-2>>2:", -2>>2)
}

本文来自:简书

感谢作者:_H_8f4a

查看原文:Golang位运算符

相关阅读 >>

词法分析器

分布式定时任务执行器

Go - 实现项目内链路追踪(二)

Golang二维切片初始化

你知道为啥不再建议使用Gopath以及如何使用Go modules吗

Go get下载包失败问题

Go语言条件语句

Go语言指针作为函数参数

Go2设计草案介绍

Go mod特定依赖包处理

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...