一元运算符如何'&'工作?
在测试项目中我运行了这段代码:
int num = 50, num2 = 100;
int x = num & num2;
结果:x = 32
int num = 100, num2 = 90;
int x = num & num2;
结果:x = 64
这是如何计算的?
答案 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 & 100
是0b110010 & 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。