c#语法&符号

时间:2010-10-25 19:33:47

标签: c#

抱歉,对于c#来说这可能是一个令人尴尬的noob问题,但是我遇到了以下语法并且不确定它在做什么...

&带有数字的c#表达式中的符号吗?

例如,1& 1返回1?

3 个答案:

答案 0 :(得分:9)

在你提到的情况下,它是按位 AND运算符 - 它对2个整数的每对相应位执行AND operation并返回结果,也作为整数。 1 & 1 == 1因为将二进制数与自身进行AND运算会生成相同的数字 - 所有零位将被投影为零(false和false为false),而所有一位将被投影为一(true和true为真) )。

In C#&也可以作为:

  1. 非短路逻辑 AND运算符:如果其布尔操作数均为true,则返回true。与&&不同,它将评估其第二个操作数的值,即使第一个操作数已被评估为false。它的用途是not recommended
  2. 一元地址运算符(需要不安全的上下文)。

答案 1 :(得分:6)

按位AND运算符&

& (按位AND)运算符将其第一个操作数的每个位与第二个操作数的相应位进行比较。如果两个位都为1,则结果的相应位设置为1.否则,它将相应的结果位设置为0.

两个操作数必须具有整数或枚举类型。执行每个操作数的常规算术转换。结果与转换的操作数具有相同的类型。

bit pattern of a           0000000001011100
bit pattern of b           0000000000101110
bit pattern of a & b       0000000000001100

注意: 按位AND(&)不应与逻辑AND混淆。 (&&)运算符。例如,

  

1& 4评估为0

     

,而

     

(1!= 0)&& (4!= 0)评估为真

C++ source, I adapted it a bit

一些文章:

C# And Bitwise Operator

Bitwise operators in c# OR(|), XOR(^), AND(&), NOT(~)

C# Logical Bitwise Operators

答案 2 :(得分:3)

正如所指出的那样,它是按位AND运算符。通常你用它来比较一个数字中是否设置了某些位,即如果你想检查第3位是否设置,你可以通过这样做来测试。

bool isBitSet = (myNumber & 4) > 0;

你也可以用位掩码“取消”来取消数字的位,即如果你只想查看数字的两个最低有效位:

int lowBits = myNumber & 3;