回答編集履歴
4
もうちょっと修正
test
CHANGED
@@ -50,4 +50,4 @@
|
|
50
50
|
|
51
51
|
つぎに`a=b=!a`では、`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
52
52
|
|
53
|
-
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返して
|
53
|
+
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返しますが、これを受け取る人は誰もいないので捨てられておわり、です。結局aとbは0になって、cの値は変わらず、ですね。
|
3
指摘に基づき修正
test
CHANGED
@@ -44,10 +44,10 @@
|
|
44
44
|
|
45
45
|
また、`=`は代入の演算子で、右辺の値を左辺の変数に代入するとともに、左辺に代入された値を返します(int a;に対してa=1.5などとすると式の値は1になる)。
|
46
46
|
|
47
|
-
`4/3*c*c, a=b=!a`は
|
47
|
+
`b=4/3*c*c, a=b=!a`は
|
48
48
|
|
49
|
-
まず4/3*c*cを評価し
|
49
|
+
まずb=4/3*c*cを評価して4/3*c*cを計算して結果をbに代入します。
|
50
50
|
|
51
|
-
`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
51
|
+
つぎに`a=b=!a`では、`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
52
52
|
|
53
53
|
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返して`4/3*c*c, a=b=!a`の値も0。これがbに代入されます。
|
2
指摘があったので修正
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
|
11
|
+
プログラムをよく見てください。(a!=b)です。`!`ではなく、`!=`で一つの演算子です。`!=`は、演算子の左辺と右辺の値が異なればint型の1を、等しければ0を返します。もちろん、字面としては`==`との対比で「等しいことの否定」を意図はしているでしょうけれど。
|
12
12
|
|
13
13
|
|
14
14
|
|
1
誤記修正
test
CHANGED
@@ -48,6 +48,6 @@
|
|
48
48
|
|
49
49
|
まず4/3*c*cを評価しますがその値は捨てます(つまりこの場合は全く無意味)。
|
50
50
|
|
51
|
-
`=`は
|
51
|
+
`=`は右辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返し、これbに代入してその値を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)。
|
52
52
|
|
53
53
|
aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返して`4/3*c*c, a=b=!a`の値も0。これがbに代入されます。
|