私はいくつかのコードを書いていましたが、システム全体を混乱させるプログラムのある部分で予期せぬ出力を得ていました。論理式Cの誤解
基本的な論理式に問題を抽出して簡略化することができました。さんが言ってみましょう:
int i = 1, j = 1, k = 0;
printf("%d\n", ++i || ++j && k);
printf("%d, %d, %d\n", i, j, k);
return 0;
このプログラムの出力は次のとおりです。
1
2
1
0
私はj
の値が短いために2
に増分されていなかったことを考えています||
オペレータの回路特性。しかし、私は最初の"%d"
の値が1
である方法を混乱させる。 ステートメントが1
を返すために、k
の値は0でないべきですか?または、++i || ++j
が0
でないため、このステートメントはまったく実行されないため、1
を返しますか?
- 私は
&&
論理と、及びexpr1の & & expr2のあるexpr1と & & expr2のの値が両方非ゼロである場合、値1を有していることを知っています。
この説明の基本的な性質については、ご理解ください。
残念ながら私はVS2015を使用しています。私はすぐに 'gcc'を使い始めるつもりです。私はあなたがそうするように勧めていると仮定していますか?私はいつもVSを学生のために推奨しているので使用しています...(または私は考えました) –
@Rizzo gccは、開発者の利便性と生成されるコードのスピードの両方において、間違いなく素晴らしいコンパイラだと思います。 ;) – PSkocik