go 位运算和移位运算

计算机的所有运算都是以补码在运算。

1 & (按位与) : 两位全为1,则结果为1,否则为0
a := 1  补码为 0001
b := 2  补码: 0010  
推导为===> 0000
fmt.Println(a & b) // 0

c := 2  // 0010
d := 3  // 0011   
推导同为1的二进制位:0010  所以结果为:2
fmt.Println(a & b) // 2
2 | (按位或) : 两位其中有一位为1就为1,结果则为1,否则就为0
2 的补码为:0010
3 的补码为:0011  ===> 0011
fmt.Println(2 | 3) //  3 
3 相异或运算: 当对应二进制位不同时结果为1,相同时为0
2   补码为0010
3   补码:0011   
===> 0001
fmt.Println(2 ^ 3) //  1
左移 <<
左移2位,高位丢弃,低位补0
1 补码:0001
2 补码:0010
===> 往左移2位:0100
fmt.Println(1 << 2) //  4
右移>> 就是除以N次方
1 补码:0001
2 补码:0010
1移2位==> 0000,所以最终是0
fmt.Println(1 >> 2) //  0

4 补码:0100
2 补码:0010
==> 0001 0000
fmt.Println(4 << 2) // 16
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1&0...
    小白e7899阅读 2,379评论 0 1
  • 二进制转十进制 0011 10012^(6-1) + 2^(5-1) + 2^(4-1) + 2^(1-1) = ...
    u14e阅读 1,304评论 0 1
  • intmain(){ /* 按位与 & 只有对应的两个二进位均为1时,结果位才为1,否则为0。 1010101...
    一直很安静_25ae阅读 715评论 0 0
  • 进制基本概念 什么是进制?进制是一种计数的方式,数值的表示形式 常见的进制十进制、二进制、八进制、十六进制 进制书...
    极客江南阅读 2,042评论 0 11
  • 1. 概述 今天来点概念性的东西,如果在代码中用到位运算和联合体位域,是不是会显得高级一些呢?哈哈。 作为一个开发...
    iOS发呆君阅读 523评论 0 4