C#中按位AND的倒数是多少?

时间:2009-04-23 19:43:08

标签: c# bitwise-operators

我需要进行逆计算,其中包括按位AND运算,我该怎么做?

我尝试了异或,但没有帮助。

        int i = 254 & 2;
        Console.Write("254 & 2 ={0}", i + "\n");
        Console.Write("{0} ^ 2 ={1}",i, (i ^ 2) + "\n");

不起作用。我该如何计算?

6 个答案:

答案 0 :(得分:28)

鉴于i,您无法返回254。通过&,你已经破坏了第二位没有存储的数据。

 1111 1110
&0000 0010
----------
 0000 0010

你如何恢复6个丢失的位?对于x & 2 == 2,您几乎可以放置任何x,这是真的。

 0010 1010 // = 42
&0000 0010
----------
 0000 0010

x是254还是42?你无法分辨。

答案 1 :(得分:22)

技术上,与AND相反的是NAND:

  

〜(254& 2)

注意〜是补码运算符,并且按位NOT(将每个位切换到相反的位置)。

但你究竟想要什么?你想要完成什么?

如果你试图撤消计算,你不能 - 没有反函数,使得inverseand(和(x,y))将返回x或y,即使给出其中一个反函数。 / p>

- 亚当

答案 2 :(得分:3)

您不能,当您执行&。

时,您丢失了那里的数据

4位示例:

1110 & 0010 = 0010

如果你只知道结果0010和&的第二个操作数,你就无法知道哪些是1和哪些不是。 (也是0010)。

答案 3 :(得分:1)

维基百科有一篇关于按位运算的文章,它们如何工作以及它们在C和Java中的语法与C#非常相似

http://en.wikipedia.org/wiki/Bitwise_operation

MSDN当然也有每个按位和逻辑运算符的文档,每个运算符都有一个例子:

http://msdn.microsoft.com/en-us/library/6a71f45d(vs.71).aspx

答案 4 :(得分:0)

相反的计算是什么意思?

如果你看到数字254是一个由8位组成的位寄存器,那么所有位都会被设置为1.

计算254& 2与检查寄存器中的位号2是否设置相同。

与此相反的是什么?检查是否设置了所有其他位?

答案 5 :(得分:0)

如果&操作的目的是检查是否设置了位1,那么潜在的“相反”操作是“设置位1”。

即:

val = val | 2;

这会覆盖当前位2中的值,并且不会触及任何其他位。

如果字节中的8位被认为是完全独立的位,那么可以通过触摸任何其他位来改变它们中的任何一位。

在这种情况下,某些原始信息丢失并不重要。我们实际上并不关心其他位的值,并且最常使用位掩码时,所讨论的位的原始值无论如何都是零。