回答編集履歴
4
もうちょっと修正
answer
CHANGED
@@ -24,4 +24,4 @@
|
|
24
24
|
`b=4/3*c*c, a=b=!a`は
|
25
25
|
まずb=4/3*c*cを評価して4/3*c*cを計算して結果をbに代入します。
|
26
26
|
つぎに`a=b=!a`では、`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
27
|
-
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返して
|
27
|
+
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返しますが、これを受け取る人は誰もいないので捨てられておわり、です。結局aとbは0になって、cの値は変わらず、ですね。
|
3
指摘に基づき修正
answer
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
3つ目
|
22
22
|
カンマ演算子は、`,`の左側の式、右側の式を順次評価し、右側の式の値を返す演算子です。
|
23
23
|
また、`=`は代入の演算子で、右辺の値を左辺の変数に代入するとともに、左辺に代入された値を返します(int a;に対してa=1.5などとすると式の値は1になる)。
|
24
|
-
`4/3*c*c, a=b=!a`は
|
24
|
+
`b=4/3*c*c, a=b=!a`は
|
25
|
-
まず4/3*c*cを評価し
|
25
|
+
まずb=4/3*c*cを評価して4/3*c*cを計算して結果をbに代入します。
|
26
|
-
`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
26
|
+
つぎに`a=b=!a`では、`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
27
27
|
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返して`4/3*c*c, a=b=!a`の値も0。これがbに代入されます。
|
2
指摘があったので修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
> ・1つ目のprintfまでのコマンドに関して
|
4
4
|
<略> !の式が理解できません。調べると否定の意味を持つとあった
|
5
5
|
|
6
|
-
|
6
|
+
プログラムをよく見てください。(a!=b)です。`!`ではなく、`!=`で一つの演算子です。`!=`は、演算子の左辺と右辺の値が異なればint型の1を、等しければ0を返します。もちろん、字面としては`==`との対比で「等しいことの否定」を意図はしているでしょうけれど。
|
7
7
|
|
8
8
|
2つ目
|
9
9
|
三項演算子は、その言葉のとおり3つの項を処理し、一つの値を返します。
|
1
誤記修正
answer
CHANGED
@@ -23,5 +23,5 @@
|
|
23
23
|
また、`=`は代入の演算子で、右辺の値を左辺の変数に代入するとともに、左辺に代入された値を返します(int a;に対してa=1.5などとすると式の値は1になる)。
|
24
24
|
`4/3*c*c, a=b=!a`は
|
25
25
|
まず4/3*c*cを評価しますがその値は捨てます(つまりこの場合は全く無意味)。
|
26
|
-
`=`は
|
26
|
+
`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
27
27
|
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返して`4/3*c*c, a=b=!a`の値も0。これがbに代入されます。
|