二元 NOT (~) 运算符如何工作?
How does the binary NOT (~) operator work?
我对编程很陌生,我一直在尝试学习一些基本的二进制文件,但还有一件事我不太明白。这是关于 NOT 运算符的规则。
假设我不想计算这个:62&~29
62 = 111110
29 = 011101
现在我理解的结果应该是这样的:
100011 = 35
但是我从代码中得到的结果是 34。
所以我的问题是:最后一个值发生了什么?为什么不添加到 34?
希望有人能给我解释一下:D
祝你有愉快的一天。
~
是 not not 运算符,它是 按位补 运算符。
它采用操作数的位模式,将所有0位转换为1位,将所有1位转换为0位。
它对数值的影响将取决于您的实现使用的补充约定,以及用于表示该类型的位数。
在您的具体示例中,62&~29
被评估为 62&(~29)
即 111110&(~011101)
即 111110&a100010
即 100010
即 34
.在这里,我很迂腐,我使用 a
来代表多个 1 位,因此位数等于您的类型的宽度。
29 --> 011101
not29 --> 100010 (turn 1s into 0 and vice-versa)
62 --> 111110
not29 --> 100010
62¬29 --> 100010 (1 if and only if both are 1, otherwise 0)
你是怎么得到 35 的?
我对编程很陌生,我一直在尝试学习一些基本的二进制文件,但还有一件事我不太明白。这是关于 NOT 运算符的规则。
假设我不想计算这个:62&~29
62 = 111110
29 = 011101
现在我理解的结果应该是这样的:
100011 = 35
但是我从代码中得到的结果是 34。
所以我的问题是:最后一个值发生了什么?为什么不添加到 34?
希望有人能给我解释一下:D
祝你有愉快的一天。
~
是 not not 运算符,它是 按位补 运算符。
它采用操作数的位模式,将所有0位转换为1位,将所有1位转换为0位。
它对数值的影响将取决于您的实现使用的补充约定,以及用于表示该类型的位数。
在您的具体示例中,62&~29
被评估为 62&(~29)
即 111110&(~011101)
即 111110&a100010
即 100010
即 34
.在这里,我很迂腐,我使用 a
来代表多个 1 位,因此位数等于您的类型的宽度。
29 --> 011101
not29 --> 100010 (turn 1s into 0 and vice-versa)
62 --> 111110
not29 --> 100010
62¬29 --> 100010 (1 if and only if both are 1, otherwise 0)
你是怎么得到 35 的?