二进制NOT(〜)运算符如何工作?

时间:2016-11-25 09:31:38

标签: binary bit-manipulation bitwise-operators gml

我对编程很陌生,我一直在努力学习一些基本的二进制文件,但仍有一件事我不太了解。它是关于NOT运算符的规则。

我想说不计算:62&~29

62 = 111110
29 = 011101

现在根据我的理解结果应该是这样的:

100011 = 35

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

所以我的问题是:最后一个值发生了什么?为什么没有被添加到34?

希望有人可以向我解释:D

度过愉快的一天。

2 个答案:

答案 0 :(得分:1)

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

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

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

在您的具体示例中,62&~29被评估为62&(~29) 111110&(~011101)111110&a100010 10001034a。在这里,我是迂腐的并使用cmake代表1位数,所以位数等于你的类型的宽度。

答案 1 :(得分:0)

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