【问题标题】:What is ^0 in golang?golang 中的 ^0 是什么?
【发布时间】:2013-10-10 18:58:09
【问题描述】:

我在代码库中看到了 ^0。

例子:

type stat struct {
  ...
  min int64
  ...
}

newStat := stat{min: ^0}

^0 是什么意思?

【问题讨论】:

    标签: go bitwise-operators twos-complement


    【解决方案1】:

    根据the docs

    ^x 按位补码是 m ^ x,其中 m = "all bits set to 1" for

    无符号 x 和 m = -1 用于有符号 x

    表示^0与其他主流语言中的~0相同。

    two's complement(大多数编程语言采用)上,零补码的值为 -1(在有符号数据类型上)。所以这是一种写法:

    newStat := stat{min: -1}
    

    【讨论】:

    • 您好,感谢您的回复。我是围棋初学者,但我仍然不知道这意味着什么。什么是〜0?什么是按位补码?你能澄清一下吗?提前致谢!
    • 按位补码是从数据类型中获取每一位并将其反转。例如 4 位二进制中的 0 为 0000,其按位补码为 1111。同理,4 位二进制中的 10 为 1010,其补码为 0101。
    • 如需进一步参考,请阅读bitwise operations
    • 非常感谢。这听起来可能很愚蠢,但按位运算有什么意义呢?为什么他们不只是写 stat{min: -1} 而是不得不经历这个麻烦来写 ^0 ?
    • 我的猜测:他们并没有像你通常认为的整数(来计算事物)那样使用“min”,而是将它用作一组位。如果最后一位为 1,则表示某种含义,如果倒数第二位为 1,则表示其他含义,等等。在 Go 中,这种风格的代码可能使用 '1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多