5

次のコードの出力はどうなりますか
int x,a=3;
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);

出力は次のとおりです。113.方法を知りたいですか?そして、手段の後に+記号は何を意味しますか?

4

5 に答える 5

19

DrYapは正しいと思います。

x = + + a + + + a + + + 5; 

と同じです:

x = + (+ a) + (+ (+ a)) + (+ (+ 5));

ここでの重要なポイントは次のとおりです。

1)c、c ++には接尾辞演算子として+がないため、接頭辞として解釈する必要があることがわかります

2)モナディック+はダイアディック+よりも緊密に結合します(優先順位が高くなります)。

おかしいですね。もしこれらが-兆候だったら、それほど奇妙に見えないでしょう。モナディック+/-は単なる先頭記号です。言い換えると、「+x」は「0+x」と同じです。

于 2012-04-28T07:48:49.880 に答える
13

aの後の+は、次の値の前の+と見なされます。一定の間隔を使用する場合は、次と同じです。

x = + + a + + + a + + + 5;

ただし、すべての+が必要なわけではないため、次のように動作します。

x = a + a + 5;

2つの+記号の間に空白がない++であるインクリメント演算子を使用したことがないため、aの値は変更されません。+と++は2つの別個の演算子です。

于 2012-04-28T07:41:11.303 に答える
3

コードは次と同等のようです。

x= (+(+(a)))+ (+ (+(a)))+ (+(+(5)));

つまりx = a + a + 5。これは11です。数字の前に+または-記号を付けることができますよね?現在、これら+は単に変数の符号を示しています。符号がであるため+、変数は変更されません。つまり、「+ 5」は「5」を意味し、「+ a」は「a」を意味し、「+ + a」は「+(+ a)」を意味し、「a」を意味します。同じようにあなたは書くことができますx = + + + 3 + + + + 3 + + + + 5。またはx = - + + - 3 + - + - 3 - - + 5;

于 2012-04-28T07:54:05.780 に答える
3

+演算子が互いに隣接することはありませんが、常に空白で区切られているため、ステートメント はx=+ +a+ + +a+ + +5;実際には次のように読み取られます。

x=+ (nothing)+a+(nothing) +(nothing) +a+(nothing) +(nothing) +5;

つまり、基本的に、最終的な方程式はそのようなもの x=a+a+5;になり、したがって結果になります。

于 2012-04-28T07:54:40.890 に答える
0

x = + + a + + + a + + +5:これは

x = x = + + a + + + a + + +5または、x = +(+ a)+(+(+ a))+(+(+ 5))と書くことができ、+は最終的にx=a + a+5として評価される符号。

于 2012-04-28T08:53:49.117 に答える