Golang位运算符

_H_8f4a · · 440 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

440 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传