如何||和&&作品

时间:2013-06-27 16:37:19

标签: c++ c variable-assignment

main( ) {
    int   i = 4, j = -1, k = 0, w, x, y, z ;
    w = i || j || k ;
    x = i && j && k ;
    y = i || j && k ;
    z = i && j || k ;
    printf ( "\nw = %d x = %d y = %d z = %d", w, x, y, z ) ;
}

我刚学习C而且我遇到了这段代码。老实说,我不知道w,x,y和z分配给了什么。显然输出如下:

w = 1 x = 0 y = 1 z = 1

'w'如何等于1?我不明白。

5 个答案:

答案 0 :(得分:11)

||是逻辑OR运算符。来自C11 s6.5.14逻辑OR运算符

  

||如果任一操作数进行比较,则运算符应为1   不等于0;否则,它产生0.结果的类型为int。

     

... ||运营商保证从左到右的评估;

将此应用于我们得到的w的计算

w = i || j || k  == (i || j) || k
                 == (non-zero || non-zero) || 0
                 == 1 || 0
                 == 1

xyz的计算方式类似。 C11 s6.5.13.3 表明&&运算符的结果应为0或1。

答案 1 :(得分:6)

在C中,布尔值没有“强”内置类型,因此使用整数。评估逻辑表达式(例如使用||&&的结果)的结果可以分配给整数变量。

当在逻辑运算符中使用值时,布尔解释非常简单:零被解释为false,而所有非零值被解释为true

现在你应该能够自己找出表达式:

  • i || j || k评估为1,因为ij不是零
  • i && j && k评估为0,因为k为零,
  • ......等等。

答案 2 :(得分:5)

这就是它在概念上的运作方式:

w = i || j || K表;

w = 4 || -1 || 0; //值已替换

w = true || 0; // 4 || -1评估为真

w =(true); // true被赋值为整数

w = 1; // 0为假,1为真

答案 3 :(得分:2)

||是合乎逻辑的 OR

w = i || j || k;

相当于:

w = (i != 0) || (j != 0) || (k != 0);

i是4,这解释了w为真(由于C使用整数来处理布尔值,因此将其计算为1)。

同样适用于&&(逻辑 AND )等。

答案 4 :(得分:2)

这是逻辑操作。

|| - 表示逻辑或,如果至少一个元素不为0,则结果为1,否则为0; &安培;&安培; - 表示逻辑,如果所有元素均为1,则结果为1,否则为0;

逻辑且具有更高的优先级,因此:

x = 0 || 4 && 0;

将是0,因为:

  1. 4& 0 = 0
  2. 0 || 0 = 0。
  3. 这些运算符大约是数字的全值。有|和&与位连接的运算符。 关于工作和优先事项的一切都是一样的,只是简短的例子:

    uint8_t x = 2 || 4 && 7;
    
    
    
    1. 4=00000100 and 7=00000111
          00000100
       &  00000111
    gives:00000100
     2. 2=00000010
          00000010
       |  00000100
    gives:00000110, it is 6
    

    我希望它有所帮助。