术语问题:&&操作者

时间:2011-04-15 09:07:22

标签: c# operators boolean

我一直在阅读相当多的消息来源,但他们的定义不同:

  • &安培;&安培;是逻辑的逻辑运算符 连接//我想这是正确的

  • &安培;&安培;是逻辑AND // I的运算符 认为这不准确 技术观点

  • &安培;&安培;是 条件运算符执行 逻辑AND //我认为这是对的 以及

虽然在理解方面都是正确的,但我会说第一个是最准确的。或者我错了?

3 个答案:

答案 0 :(得分:3)

在C#,Java,C ++,C以及其他几种语言中,&&是布尔AND运算符的编程语言实现。它旨在解释以下事实(不适用于纯命题逻辑):

  • 评估操作数可能是计算上昂贵的
  • 评估操作数可能会因异常而失败
  • 评估操作数可能会进入无限循环

因此编程语言中的布尔表达式确实有四种可能的结果:truefalse,“异常”和“无限循环”。在某些情况下,一个有两个布尔表达式,其中第二个表达式的可能成功可以通过查看第一个表达式来确定。例如,使用表达式foo != nullfoo.bar == 42,我们可以确定如果第一个表达式为false,则第二个表达式将失败。因此,&&运算符被设计为“短循环”:如果左操作数的计算结果为false,则不计算右操作数。在两个操作数都成功评估为true或false的所有情况下,此规则产生的结果与实际评估两个操作数的结果相同,但它允许提高性能(因为可能根本不需要评估右操作数)和在不牺牲安全性的情况下增加紧凑性(如果一个人注意构造表达式,使左操作数“守卫”正确的一个)。同样,如果左操作数的计算结果为真,||将不会计算右操作数。

一个较短的答案是虽然&&受到AND的强烈启发,但它的设计目的是考虑某些编程特性,而a && b或许应该被表述为“如果表达式返回false则表示错误a为false,如果b为真,则a的值为“。

答案 1 :(得分:1)

答案很简单。

它对2个返回布尔值的逻辑表达式执行AND运算。如果第一个是假的,它不会评估第二个。

评估两者的使用情况&。

复杂的答案。

标题12.3.3.23中的

http://www.ecma-international.org/publications/standards/Ecma-334.htm似乎最相关。

我发现自己没有资格在内部批评这个定义。

  

12.3.3.23&&表达式

     

对于expr-first && expr-second形式的表达式expr:

     

expr-first之前的v的明确赋值状态与expr之前的v的明确赋值状态相同。

     

•如果expr-second之后的v的状态是明确赋值或“在真实表达后明确赋值”,则明确赋值exprfirst之前的v的明确赋值状态。否则,它没有被无限期分配。

     

•expr之后v的明确赋值状态由下式确定:

     
    

o如果明确赋予expr-first之后的v状态,则明确赋予expr之后的v状态。

         

o否则,如果expr-second之后的v的状态是明确赋值的,并且expr-first之后的v的状态是“在假表达后明确赋值”,那么expr之后的v的状态肯定是分配

         

o否则,如果expr-second之后的v状态明确赋值或“真正表达后明确赋值”,则expr之后的v状态为“在真实表达后明确赋值”。

         

o否则,如果expr-first之后的v的状态是“在false表达式之后明确赋值”,并且expr-second之后的v的状态是“在false表达式之后明确赋值”,那么expr之后的v的状态是“绝对是在虚假表达后分配的。”

         

o否则,expr之后的v状态未明确赋值。

  

[示例:在以下代码中

class A
{
    static void F(int x, int y) {
    int i;
    if (x >= 0 && (i = y) >= 0) {
       // i definitely assigned
    }
    else {
        // i not definitely assigned
    }
        // i not definitely assigned
    }
}
  

变量i被认为是在if语句的一个嵌入语句中明确赋值而在另一个语句中没有。在方法F的if语句中,变量i在第一个嵌入语句中明确赋值,因为表达式(i = y)的执行总是在执行此嵌入语句之前。相反,变量i未在第二个嵌入语句中明确赋值,因为x >= 0可能已经测试为false,导致变量i被取消分配。结束例子]

我希望能够解决问题。

答案 2 :(得分:0)

连词是“和”的另一个词。所以他们的输出都是正确的。

就他们实际提供输出的方式而言,如果第一个参数为假,&&通常不会评估第二个参数。