次のコードの出力はどうなりますか
int x,a=3;
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);
出力は次のとおりです。113.方法を知りたいですか?そして、手段の後に+記号は何を意味しますか?
DrYapは正しいと思います。
x = + + a + + + a + + + 5;
と同じです:
x = + (+ a) + (+ (+ a)) + (+ (+ 5));
ここでの重要なポイントは次のとおりです。
1)c、c ++には接尾辞演算子として+がないため、接頭辞として解釈する必要があることがわかります
2)モナディック+はダイアディック+よりも緊密に結合します(優先順位が高くなります)。
おかしいですね。もしこれらが-兆候だったら、それほど奇妙に見えないでしょう。モナディック+/-は単なる先頭記号です。言い換えると、「+x」は「0+x」と同じです。
aの後の+は、次の値の前の+と見なされます。一定の間隔を使用する場合は、次と同じです。
x = + + a + + + a + + + 5;
ただし、すべての+が必要なわけではないため、次のように動作します。
x = a + a + 5;
2つの+記号の間に空白がない++であるインクリメント演算子を使用したことがないため、aの値は変更されません。+と++は2つの別個の演算子です。
コードは次と同等のようです。
x= (+(+(a)))+ (+ (+(a)))+ (+(+(5)));
つまりx = a + a + 5
。これは11です。数字の前に+または-記号を付けることができますよね?現在、これら+
は単に変数の符号を示しています。符号がであるため+
、変数は変更されません。つまり、「+ 5」は「5」を意味し、「+ a」は「a」を意味し、「+ + a」は「+(+ a)」を意味し、「a」を意味します。同じようにあなたは書くことができますx = + + + 3 + + + + 3 + + + + 5
。またはx = - + + - 3 + - + - 3 - - + 5;
。
+
演算子が互いに隣接することはありませんが、常に空白で区切られているため、ステートメント
はx=+ +a+ + +a+ + +5;
実際には次のように読み取られます。
x=+ (nothing)+a+(nothing) +(nothing) +a+(nothing) +(nothing) +5;
つまり、基本的に、最終的な方程式はそのようなもの
x=a+a+5;
になり、したがって結果になります。
x = + + a + + + a + + +5:これは
x = x = + + a + + + a + + +5または、x = +(+ a)+(+(+ a))+(+(+ 5))と書くことができ、+は最終的にx=a + a+5として評価される符号。