回答編集履歴

4

もうちょっと修正

2021/09/29 13:13

投稿

thkana
thkana

スコア7703

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を返して`4/3*c*c, a=b=!a`の値も0。これがbに代入されます。
53
+ aは2、これは0以外なので、!aは0、これをbに代入してb=!aは0を返し、`a=(b=!a)`で式全体も0を返しますが、これを受け取る人は誰もいないので捨られておわり、です。結局abは0になって、cの値は変わらず、で

3

指摘に基づき修正

2021/09/29 13:12

投稿

thkana
thkana

スコア7703

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

指摘があったので修正

2021/09/29 13:06

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 独立した`!`があるわけではありません。`!=`で一つの演算子です。`!=`は、演算子の左辺と右辺の値が異なればint型の1を、等しければ0を返します。もちろん、字面としては`==`との対比で「等しいことの否定」を意図はしているでしょうけれど。
11
+ プログラムをよく見てください。(a!=b)です。`!`ではなく、`!=`で一つの演算子です。`!=`は、演算子の左辺と右辺の値が異なればint型の1を、等しければ0を返します。もちろん、字面としては`==`との対比で「等しいことの否定」を意図はしているでしょうけれど。
12
12
 
13
13
 
14
14
 

1

誤記修正

2021/09/28 23:50

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -48,6 +48,6 @@
48
48
 
49
49
  まず4/3*c*cを評価しますがその値は捨てます(つまりこの場合は全く無意味)。
50
50
 
51
- `=`は辺から先に処理されますから、まずb=!aで、`!`は(これは単独の!)否定の演算子、!に続く値が真(0以外)なら偽(0)を、偽なら真(1)を返します(真偽の判断のときには0以外を真としますが、返す値の真偽では1が真です。ときどき「0以外の不定の値を返す」と勘違いしている人もいます)
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に代入されます。