标签:lan 变量 package 比较 性能优化 有意思 port 意思 例子
& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移
感觉位运算操作符虽然在平时用得并不多,但是在涉及到底层性能优化或者使用某些trick的时候还是比较有意思。
&(AND) |(OR) 就不提了最常用的东西 会编程就会。
^(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 首先我们先换算成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
进行转化为二进制 然后向左或者向右移动。
标签:lan 变量 package 比较 性能优化 有意思 port 意思 例子
原文地址:http://www.cnblogs.com/piperck/p/6139369.html