位清除 &^:将指定位置上的值设置为 0。将运算符左边数据相异的位保留,相同位清零 :
X=2
Y=4
x&^y==x&(^y)
首先我们先换算成2进制 0000 0010 &^ 0000 0100 = 0000 0010 如果y bit位上的数是0则取x上对应位置的值, 如果y bit位上为1则结果位上取0
- 如果右侧是0,则左侧数保持不变
- 如果右侧是1,则左侧数一定清零
- 功能同a&(^b)相同
- 如果左侧是变量,也等同于:
var a int
a &^= b
- ^(XOR) 在Go语言中XOR是作为二元运算符存在的。但是如果是作为一元运算符出现,他的意思是按位取反。
- 如果作为二元运算符则是, XOR是不进位加法计算,也就是异或计算。
0000 0100 + 0000 0010 = 0000 0110 = 6
- 常见可用于整数和浮点数的二元运算符有
+
、-
、*
和/
。 (相对于一般规则而言,Go 在进行字符串拼接时允许使用对运算符 + 的重载,但 Go 本身不允许开发者进行自定义的运算符重载) - 对于整数运算而言,结果依旧为整数,例如:
9 / 4 -> 2
。 - 取余运算符只能作用于整数:
9 % 4 -> 1
。 - 浮点数除以 0.0 会返回一个无穷尽的结果,使用 +Inf 表示。
- 你可以将语句 b = b + a 简写为 b+=a,同样的写法也可用于 -=、*=、/=、%=。
- 对于整数和浮点数,你可以使用一元运算符 ++(递增)和 --(递减),但只能用于后缀:
i++ -> i += 1 -> i = i + 1
i-- -> i -= 1 -> i = i - 1
- 同时,带有
++
和--
的只能作为语句,而非表达式,因此n = i++
这种写法是无效的。 - 函数
rand.Float32
和rand.Float64
返回介于 [0.0,1.0) 之间的伪随机数,其中包括 0.0 但不包括 1.0。函数 rand.Intn 返回介于 [0,n) 之间的伪随机数。 - 你可以使用
Seed(value)
函数来提供伪随机数的生成种子,一般情况下都会使用当前时间的纳秒级数字。