1

我不明白这段代码发生了什么:

if ((_value & item.Value) == item.Value)
{
   item.IsSet = true;
}

在我正在查看的这个特定示例中,我看到以下内容:

如果_value是 4103 但item.Value为 0,则为真。

如果_value是 4103 但item.Value为 1,则为真。

如果_value是 4103 但item.Value为 2,则为真。

如果_value是 4103 但item.Value为 4,则为真。

如果_value是 4103 但item.Value为 8,则不正确。

如果_value是 4103 但是item.Value16,则不正确。

如果_value是 4103 但是item.Value256,则不正确。

如果_value是 4103 但是item.Value512,则不正确。

如果_value是 4103 但是item.Value1024,则不正确。

如果_value是 4103 但是item.Value2048 则不正确。

如果_value是 4103 但是item.Value4096,这是真的。

在另一个示例中,我看到以下内容:

如果_value为 51 但item.Value为 0,则为真。

如果_value为 51 但item.Value为 1,则为真。

如果_value是 51 但item.Value为 2,则为真。

如果_value是 51 但是item.Value4,则不正确。

如果_value是 51 但是item.Value8,那不是真的。

如果_value是 51 但是item.Value16,这是真的。

如果_value是 51 但是item.Value32,这是真的。

有人可以向我解释一下吗?

4

4 回答 4

4

按位与,所以从你的例子中:

(_value & item.Value) == item.Value

_value = 4103 = 1000000000111 binary
_item.Value = 0  = 0 binary

  1000000000111
& 0000000000000
---------------
  0000000000000

_value = 4103 = 1000000000111 binary
_item.Value = 4096  = 1000000000000 binary

  1000000000111
& 1000000000000
---------------
  1000000000000
于 2013-02-27T17:29:00.480 回答
4

用二进制重写数字,让我们跳过零的情况:

if _value is 00110011 and item.Value is 00000001, it's true.
if _value is 00110011 and item.Value is 00000010, it's true.
if _value is 00110011 and item.Value is 00000100, it's false.
if _value is 00110011 and item.Value is 00001000, it's false.
if _value is 00110011 and item.Value is 00010000, it's true.
if _value is 00110011 and item.Value is 00100000, it's true.
if _value is 00110011 and item.Value is 01000000, it's false.
if _value is 00110011 and item.Value is 10000000, it's false.

你看到图案了吗?对应位为 1 时为真,为 0 时为假。

于 2013-02-27T17:35:42.333 回答
0

来自MSDN

&运算符可以用作一二元运算符。

对于integral类型,&计算bitwise AND其操作数的。

对于bool操作数,&计算logical AND其操作数的 也就是说,结果是true当且仅当它的两个操作数都是true

因此,当您编写 时4103,它实际上等于二进制1000000000111。您可以像这样找到整数值的二进制表示;

int i = 4103;
Console.WriteLine (Convert.ToString(i, 2)); // 1000000000111

该情况的其余过程是用真值表进行简单计算。

  INPUT         OUTPUT
 A   B          A ∧ B
 T   T          T
 T   F          F
 F   T          F
 F   F          F
于 2013-02-27T17:30:41.033 回答
0

它是按位与运算符。本质上,当您对整数 X 和 Y 进行按位与运算,然后将结果与 Y 进行比较时,您可以确保 X 在 Y 中设置为 1 的所有位也设置为 1。X 也可能有一些其他位设置为 1,但是那些我们不关心的。这是关于运营商的 MSDN 文章:

http://msdn.microsoft.com/en-us/library/sbf85k1c(v=vs.71).aspx

于 2013-02-27T17:31:13.810 回答