【问题标题】:What does ^ do?^ 有什么作用?
【发布时间】:2014-09-13 11:34:19
【问题描述】:

我希望这个问题不是愚蠢...我不知道^运算符在Go中做了什么,例如

a := 3^500

起初我以为一定是pow,但肯定不是。也不是mod (%)。

我尝试浏览文档并在 Google 上搜索,但不幸的是,Google 不认为 ^ 是搜索词。

【问题讨论】:

  • 为了将来参考,^ 运算符称为插入符号。你可以谷歌这个。您可能还想使用“Golang”而不是“Go”:)
  • 可以肯定的是,您真的没有看到3^500 吗?这没有多大意义。
  • 其实我看到了hash ^= uint32(c)
  • 如果您不了解 Go 语法,请查看 spec。它解决了大多数问题。
  • @ydaetskcoR 这就是谷歌现在带我去的地方。

标签: go operators


【解决方案1】:

与大多数语言一样,caret 运算符是按位异或。你可以在整数上使用它。

Relevant Golang documentation

Wikipedia on the bitwise xor :

按位异或需要两个长度相等的位模式并执行 对每一对对应位进行逻辑异或运算。这 如果只有第一位是 1 或只有 第二位为 1,但如果两者均为 0 或均为 1,则为 0。在此我们 执行两位的比较,如果两位是 1 不同,如果相同则为 0

按位异或可用于反转寄存器中的选定位 (也称为切换或翻转)。任何位都可以通过 XORing 来切换 1. 例如,给定位模式 0010(十进制 2),第二位和第四位可以通过位模式的按位异或来切换 在第二个和第四个位置包含 1:

     0010 (decimal 2)
 XOR 1010 (decimal 10)
   = 1000 (decimal 8)

此技术可用于操作表示集合的位模式 布尔状态。

将@karmakaze 的评论添加到此答案以获得更多有用信息:

同样作为一元运算符,它不是按位的。例如^uint(0) 导致 32 位机器的 uint0xffffffff 和 64 位机器的更长。

【讨论】:

  • 同样作为一元运算符,它不是按位的。例如^uint(0) 导致 32 位机器的 uint 值 0xffffffff 和 64 位机器的更长。
  • @karmakaze 您应该通过附加您的评论来编辑/改进答案。
猜你喜欢
  • 2023-04-10
  • 2011-07-17
  • 2011-12-30
  • 1970-01-01
  • 2019-04-26
  • 2016-04-29
  • 2017-03-02
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多