回答編集履歴
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に代入されます。
         | 
