2016-11-25 292 views
2

我对编程颇为陌生,我一直在努力学习一些基本的二进制,但仍然有一件事我不太明白。这是关于NOT运算符的规则。二进制NOT(〜)运算符是如何工作的?

可以说,我wan't计算这个:据我了解62&~29

62 = 111110 
29 = 011101 

现在的结果应该是这样的:

100011 = 35 

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

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

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

祝你有美好的一天。

回答

1

~运营商,它是位补操作。

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

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

在特定示例中,62&~29被评价为62&(~29)这是111110&(~011101)111110&a100010100010这是34。在这里,我很迂腐,我正在使用a代表1位数,所以位数等于你的类型的宽度。

+0

好吧,这更有意义。非常感谢您的解释:) –

+0

〜1实际上是-2的补码。 –

+0

糟糕。你是对的。我已经删除了这句话。 – Bathsheba

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

+0

我得到了35,因为我真的不知道如何工作,但我现在看到我错了什么。我将0转换为1,即使它们不是1或0。谢谢您的帮助 :) –

相关问题