【问题标题】:How does the binary NOT (~) operator work?二元 NOT (~) 运算符如何工作?
【发布时间】:2017-04-09 15:44:55
【问题描述】:

我对编程很陌生,我一直在尝试学习一些基本的二进制文件,但还有一件事我不太明白。这是关于 NOT 运算符的规则。

假设我不想计算这个:62&~29

62 = 111110
29 = 011101

据我所知,现在的结果应该是这样的:

100011 = 35

但我从代码中得到的结果是 34。

所以我的问题是:最后一个值发生了什么?为什么不加到 34 上?

希望有人能给我解释一下:D

祝你有美好的一天。

【问题讨论】:

    标签: binary bit-manipulation bitwise-operators gml


    【解决方案1】:

    ~not not 运算符,它是 按位补码 运算符。

    它采用操作数的位模式,将所有 0 位转换为 1 位,将所有 1 位转换为 0 位。

    它对数值的影响取决于您的实现使用的补码约定,以及用于表示该类型的位数。

    在您的具体示例中,62&~29 被评估为62&(~29),即111110&(~011101),即111110&a100010,即100010,即34。在这里我很迂腐,我使用a 来代表多个 1 位,因此位的数量等于您的类型的宽度。

    【讨论】:

    • 好吧,这更有意义。非常感谢您的解释:)
    • ~1 实际上是二进制补码中的 -2。
    【解决方案2】:
    29    --> 011101
    not29 --> 100010 (turn 1s into 0 and vice-versa)
    
    62       --> 111110
    not29    --> 100010
    62&not29 --> 100010 (1 if and only if both are 1, otherwise 0)
    

    你是怎么得到 35 的?

    【讨论】:

    • 我得到了 35,因为我真的不知道 & 是如何工作的,但我现在明白我做错了什么。我将 0 转换为 1,即使两者都不是 1 或 0。感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2010-10-02
    • 1970-01-01
    • 2020-12-31
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多