20

私は C プログラミング言語の初心者です。最近、論理 AND&&演算子について読みました。

また、C プログラミング言語では、ゼロ以外の値はすべてTRUEとして扱われることも知っています。

NON-ZERO && NON-ZERO = 1  
NON-ZERO && ZERO = 0  
ZERO && NON-ZERO = 0
ZERO && ZERO = 0  

しかし、次のプログラムを扱っていると、期待される答えが得られません。

int main(){  
  int x, y, z;  
  x = y = z = -1;  
  y = ++x && ++y && ++z;  
  printf("x = %d, y = %d, z = %d, x, y, z);  
  return 0;  
} 

私は期待している

x = 0, y = 0, z = 0 

しかし答えは

x = 0, y = 0, z = -1

なぜこの答えが得られるのか、誰か説明してもらえますか?

編集: この質問では、演算子の優先順位については質問していません。

4

5 に答える 5

22

短絡評価のため、がx0あり、が であるため、実際に評価する必要はyありzません。0 && ANYTHING0

xにインクリメントされる0と、結果は0になり、それyが得られます。

z変更されません ( -1)。


 x  | y  |  z 
----+----+-----
 -1 | -1 | -1   //x = y = z = -1;  
  0 | -1 | -1   //++x && ... Now the whole expression is evaluated to 0
  0 |  0 | -1   //y = ++x && ++y && ++z;
于 2013-08-14T10:51:42.443 に答える