位运算

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

  • 位运算思考题
func main() {
 var a int = 1 >> 2 //位右移
 var b int = -1 >> 2
 var c int = 1 << 2 //位左移
 var d int = -1 << 2
//a,b,c,d 结果是多少
 fmt.Println("a=", a)
 fmt.Println("b=", b)
 fmt.Println("c=", c)
 fmt.Println("d=", d)
}
func main() {
fmt.Println(2&3) //位与
fmt.Println(2|3)  //位或
fmt.Println(13&7) 
fmt.Println(5|4) //? 
fmt.Println(-3^3) //?//位异或
}

原码、反码、补码

对于有符号的数而言:
1、二进制的最高位是符号位:0表示正数,1表示负数;

示例 1-1byte(8位)类型在内存中表示为:1 ==> [0000 0001] -1 ==> [1000 0001]

2、正数的原码,反码,补码都一样;
3、负数的反码 = 它的原码符号位不变,其它位取反0->1 1->0
4、负数的补码 = 反码 + 1

1 ==> 原码 [0000 0001] 反码 [0000 0001] 补码 [0000 0001]
-1 ==> 原码 [1000 0001] 反码 [1111 1110] 补码 [1111 1111]

5、0的反码,补码都是0
6、在计算机运算的时候,都是以补码的方式运算的

只有+ 没有-
1-1 = 1 + (-1)

位运算符和移位运算符

  • Golang 中有3 个位运算
    分别是 按位与&按位或|按位异或^,它们的运算规则是:

按位与& : 两位全为1,结果为1,否则为0

按位或| : 两位有一个为1,结果为1,否则为0

按位异或^ : 两位一个为0,一个为1,结果为1,否则为0

  • 案例练习
    比如:2&3=? 2|3=? 2^3=?

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:StevenQin

查看原文:位运算

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

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