分享
  1. 首页
  2. 文章

golang的位运算操作符的使用

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

& 位运算 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==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

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


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

本文来自:开源中国博客

感谢作者:henrylee2cn

查看原文:golang的位运算操作符的使用

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏