Binary 二进制NOT(~)运算符是如何工作的?

Binary 二进制NOT(~)运算符是如何工作的?,binary,bit-manipulation,bitwise-operators,gml,Binary,Bit Manipulation,Bitwise Operators,Gml,我对编程非常陌生,我一直在尝试学习一些基本的二进制代码,但还有一件事我不太明白。这是关于NOT操作员的规则 假设我不想计算这个:62&~29 62 = 111110 29 = 011101 据我所知,结果应该是: 100011 = 35 但是我从代码中得到的结果是34 所以我的问题是:最后一个值发生了什么?为什么不把它加到34 希望有人能给我解释一下:D 祝您愉快。~是非非运算符,它是位补运算符 它采用操作数的位模式,并将所有0位转换为1位,将所有1位转换为0位 它对数值的影响取决于实现使用

我对编程非常陌生,我一直在尝试学习一些基本的二进制代码,但还有一件事我不太明白。这是关于NOT操作员的规则

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

62 = 111110
29 = 011101
据我所知,结果应该是:

100011 = 35
但是我从代码中得到的结果是34

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

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


祝您愉快。

~
非运算符,它是位补运算符

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

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

在您的特定示例中,
62&~29
被评估为
62&(~29)
这是
11111 0&(~011101)
这是
11111 0&a10010
这是
100010
这是
34
。在这里,我是学究,我用
a
代表一个1位的数字,所以位的数量等于你的类型的宽度

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岁的?

好吧,这更有意义。非常感谢您的解释:)~1实际上是2的补码中的-2。我得到了35,因为我不知道&是如何工作的,但我现在明白我错了什么。我将0转换为1,即使两者都不是1或0。谢谢你的帮助:)