2016-07-30 12 views
-2

kはどのように0ですか?以下のコードで

#include <stdio.h> 

int main(void) 
{ 
    int i=-3,j=2,k=0,m; 
    m=++i||++j&&++k; 
    printf("%d %d %d %d",i,j,k,m); 
} 

出力:
-2 2 0 1

なぜK = 0?私が思うから& &の演算子のためにも実行されると思いますか?

+2

なぜ読みにくいコードを書いていますか? –

答えて

8

Cは++iがゼロではないので、それは真であり、||演算子の左辺であるため、右辺に何があってもわかります本当。したがって、C(および類似の言語の束)は、右辺を評価することを気にせず、ただちに真を返す。 ++kは評価されないので、kは変更されず、m=++i||++j&&++k;ステートメントの後にはまだ0です。

+0

彼は['&&'が '||'](http://en.cppreference.com/w/cpp/language/operator_precedence)より高い優先順位を持つことを知る必要があるかもしれないので、式は '(++ i )|| (++ j && ++ k) ' –

関連する問題