代码之家  ›  专栏  ›  技术社区  ›  Bobby Borszich

是否有一段时间&&(AndAlso)对&(And)不重要

  •  8
  • Bobby Borszich  · 技术社区  · 17 年前

    //some logic that sets bool values
    
    boolean X = true;
    boolean Y = true;
    
    if (X & Y){
       // perform some operation
    }
    
    if (X && Y){
       // perform some operation
    }
    

    另外,我在C#3.0/.NET3.5中使用的一本书只提到了&&接线员,是&接线员要走了?

    4 回复  |  直到 17 年前
        1
  •  9
  •   vfilby    17 年前

    始终使用&&如果您正在执行真/假逻辑测试。一张单张&执行一点明智的“和”。在某些情况下,它可以像逻辑测试一样工作,但不能保证在所有逻辑情况下都能工作。最常用的单个&是在应用位掩码时。

    true && true == true
    

    示例(&):

    00101001 & 00100001 = 00100001
    
        2
  •  7
  •   Robert Wagner    17 年前

    如果您使用单个&(和)计算表达式的第二部分。如果第二部分依赖于第一部分为真,这可能是不好的。通常总是使用&&因为如果第一部分为假,则不评估第二部分。

    从逻辑上讲,这是一个单一的&执行其他人说过的按位操作,这对于布尔比较/计算仍然有效。真的是唯一一次单身&(或|)应使用(或布尔求值)是指第二个求值应始终运行(如果是函数调用/修饰符)。这是一种糟糕的做法,可能也是书中没有提及的原因。

    单身及;用于标记枚举和位掩码。

    以下内容将引发obj为null的异常:

    bool b = obj != null & obj.IsActive
    

    bool b = obj != null && obj.IsActive
    

    这很糟糕:

    bool b = obj.IsActive && obj.SetActive(false);
    bool b = obj.IsActive & obj.SetActive(false);
    

    政府;接线员来了。

        3
  •  3
  •   Marc Gravell    17 年前

    & 是按位AND运算符。随着时间的推移,原始二进制数学似乎越来越不常见,越来越多的开发人员并不真正理解逐位算术。这有时会让人痛苦。

    然而,有很多任务都可以用这样的方法来解决,特别是任何将数据视为标志的方法。这个 & && 操作人员

    例如:

    [Flags]
    enum SomeEnum { // formatted for space...
        None = 0, Foo = 1, Bar = 2 // 4, 8, 16, 32, ...
    }
    static void Main() {
        SomeEnum value = GetFlags();
        bool hasFoo = (value & SomeEnum.Foo) != 0;
    }
    static SomeEnum GetFlags() { ... }
    
        4
  •  1
  •   jpoh    17 年前

    &是位运算符,而&&是和操作员。两个完全不同的操作。

    int a = 1;
    int b = 2;
    assert (a & b == 0) 
    assert (a && b == true) 
    

    编辑:Ooops…此示例在C#中不起作用。它应该在C++中。希望它能说明这两个操作符的意图和区别。