9.3 几个特殊运算符

位清除 &^:将指定位置上的值设置为 0。将运算符左边数据相异的位保留,相同位清零 :

X=2
Y=4
x&^y==x&(^y)

首先我们先换算成2进制 0000 0010 &^ 0000 0100 = 0000 0010 如果y bit位上的数是0则取x上对应位置的值, 如果y bit位上为1则结果位上取0

  1. 如果右侧是0,则左侧数保持不变
  2. 如果右侧是1,则左侧数一定清零
  3. 功能同a&(^b)相同
  4. 如果左侧是变量,也等同于:
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.Float32rand.Float64 返回介于 [0.0,1.0) 之间的伪随机数,其中包括 0.0 但不包括 1.0。函数 rand.Intn 返回介于 [0,n) 之间的伪随机数。
  • 你可以使用 Seed(value) 函数来提供伪随机数的生成种子,一般情况下都会使用当前时间的纳秒级数字。