一元运算符&'如何工作

时间:2016-10-05 13:25:24

标签: c#

一元运算符如何'&'工作?

在测试项目中我运行了这段代码:

int num = 50, num2 = 100;

int x = num & num2;

结果:x = 32

 int num = 100, num2 = 90;

 int x = num & num2; 

结果:x = 64

这是如何计算的?

8 个答案:

答案 0 :(得分:2)

来自MSDN

  

Binary&运算符是为整数类型和bool预定义的。对于   积分类型,&计算其操作数的逻辑按位AND。   对于bool操作数,&计算其操作数的逻辑AND;那   是的,当且仅当两个操作数都为真时,结果才为真。

在您的情况下,它是整数类型版本。

所以:

 50 in binary is 00110010     
100 in binary is 01100100     
AND result is    00100000 (32 dec)

答案 1 :(得分:1)

按位运算符处理位并执行逐位运算。

二进制AND运算符如果两个操作数中都存在,则将一个位复制到结果中。

(A & B) = 12, i.e., 0000 1100

答案 2 :(得分:1)

首先:&在此上下文中是二进制运算符,因为它具有两个参数。它是 一元运算符。

带有两个参数的

&是按位AND运算符。

50 & 1000b110010 & 0b1100100。将&应用于每个位会为您提供0b100000,即32。

您可以类似地分析100 & 90

答案 3 :(得分:1)

二进制值

50 (10 ) = 0110010  (2)
100 (10) = 1100100  (2)

并且使用逻辑AND,因此只有两个值为1的位现在是一个导致:

0100000 (2) = 32 (10)

100 (10) = 1100100  (2)
AND
90 (10) =  1011010 (2)
------------------------
64 (10) =  1000000(2)

答案 4 :(得分:1)

将两个数字表示为二进制数(为了在执行按位操作时清楚地看到)并查看正在发生的事情:

private static String AndExplanation(int left, int right) {
  String x = Convert.ToString(left, 2);
  String y = Convert.ToString(right, 2);
  String z = Convert.ToString(left & right, 2);

  int length = Math.Max(x.Length, y.Length);

  return String.Join(Environment.NewLine,
    $"{x.PadLeft(length, '0')} ({left}) &",
    $"{y.PadLeft(length, '0')} ({right})",
    new String('-', length),
    $"{z.PadLeft(length, '0')} ({left & right})"
  );
}

测试

Console.Write(AndExplanation(50, 100));

Console.Write(AndExplanation(90, 100));

你会看到:

0110010 (50) &
1100100 (100)
-------
0100000 (32)

1011010 (90) &
1100100 (100)
-------
1000000 (64)

答案 5 :(得分:0)

简短的回答是 - 这取决于。

对于整数,在你的情况下它会进行位操作。所以01100100(100)按位AND 00110010(50)= 00100000(32)。

对于那些渴望并且(总是评估两个表达式)的布尔值 - 与懒惰的AND &&不同,如果第一个是false则不会评估第二个表达式。

答案 6 :(得分:0)

这是一个按位AND:

在“0b0110010 AND 0b1100100”中,您应该查找在公共位置共享的1和0,这样可以得到0b0100000 = 32。

“100 AND 90”同样适用于0b1000000 = 64。

我希望它有所帮助。

答案 7 :(得分:0)

这是位运算符。 50的位(二进制)是110010,100是1100100,当你对齐它们(向右冲)时,你得到 110010 1100100

&运算符的工作方式是,如果两行都有1,则每个位置得1,否则得0,如下所示。 110010 1100100 ||||||| 0100000 所以你得到二进制结果100000,即32。