0

次のコードを検討してください。

if(x = a/b, a%b) 
 printf("do this");
else 
 printf("do that");

ここで、ifステートメントをif(x = a/b && a % b). その後、それも機能します。&&したがって、コンマを演算子に置き換えること、またはその逆が常に機能するかどうかを知りたいif-else and loops

4

4 に答える 4

3

彼らはかなり違います!


最初の例で,は、コンマ operatorがあります。これは、最初のオペランドを評価して結果を破棄し、次に 2 番目のオペランドを評価してこの値 (および型) を返す二項演算子です。

そう、

if(x = a/b, a%b) 

と同等です(@jaketに感謝)

x = a/b;
if(a%b) 

a%b常に評価されます。


2 つ目の場合:

if(x = a/b && a % b)

と同等です

x = (a/b) && (a%b);
if( x )

a%ba/b(つまりa/b、0 でない) が true の場合にのみ評価されます。

于 2014-04-30T07:29:48.393 に答える
2

コンマ演算子を && に置き換えると、ロジックが少し変更されます。コンマ演算子が行うことは、x = a/b を実行して「結果を破棄する」ことです。つまり、if 条件では考慮されず、a%b のみが考慮されます。

もしあなたがそうするなら

if(x = a/b && a % b)

a/b が 0 でなく、 a % b が 0 でない場合にのみ、"do this" が出力されます。一方、コンマ演算子では、a % b がゼロでない場合にのみ「do this」が出力されます。

于 2014-04-30T07:29:39.967 に答える
1
if(x = a/b, a%b)

難読化された読みにくい書き方です

x = a/b;
if(a%b)

しかし

x = a/b && a % b

と同等です

x = ( (a/b) && (a%b) );

要約すると、同じ行に多数の異なる演算子を混在させないでください。あなたがそれで達成した唯一のことは、バグを作成しながら自分自身を混乱させることでした.

于 2014-04-30T07:37:24.213 に答える
0

&& 演算子はa/b、式 を決定する際に の結果も考慮に入れます。 のx = a/b && a%b場合,、 の結果a/bは無視されます。したがって、との置き換えは常に機能,すると&&は限りません。そして、正しいことではなく、

于 2014-04-30T07:33:44.263 に答える