- ベストアンサー
C#を教えてください。
何故、実行結果が下記になるのか教えてください using System class Compare{ static void Main(){ int a = 10, b = 20; Console.WriteLine(" a = " + a + " b = " + b) } } 実行結果 a = 10 b = 20 (" a = " + a + " b = " + b) この式の計算の仕方を教えてください。 ご多忙中恐れ入りますが、宜しくお願い申し上げます
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
No.4です。 > aには左右2つ+が付いていてbには左側しか+が付いていません。 そのようにaやbを基点に考えるのではなくて、下記のように「文字列の順番に連結される」と考えてください。 " a = " + a で文字列 " a = 10 " という文字列になります。 " a = 10" + " b = " で 文字列 "a = 10 b= " という文字列になります。 " a = 10 b= " + b で文字列 "a = 10 b= 20" という文字列になります。 --- つまり「連結演算子」は 文字列1 + 文字列2 のように使用して、 左側の文字列1 と 右側の文字列2 を連結します。 連結結果は 文字列1文字列2 という文字列になります。
その他の回答 (9)
- wormhole
- ベストアンサー率28% (1626/5665)
>(" a = " + a + " b = " + b) >"+ a +"ならば"+ b +"と思うのですが 文字列 " a = " 演算子 + 変数 a 文字列 " b = " 演算子 + 変数 b この中のどこに"+ a +"なんてものが出てきますか? あなたのやってる事は、文章を変なところで区切って意味がわからないといってのと変わりません。
- Nouble
- ベストアンサー率18% (330/1783)
お詫びの、意味で もう少し、丁寧に 説明しますね。 他言語の、経験から 言えば、 多言語、共通記載的には " a = " & a.ToString() & " b = " & b.ToString() ですね。 で、 お示しは " a = " + a + " b = " + b ですね。 お解りと、思いますが "で、挟むと 其の内側は 文字列と、認識されます。 ので、 " a = " 、" b = "、 共に、 文字列と、認識されます。 さて、此処で 演算結果、一時保管領域と、いう 概念を、持ち出します、 此処では、仮に 「レジスタ」と、 称す事に、します。 正確には、言語毎に 動きが、違うのですが、 概念的に、説明しますね。 先ず、 演算が、開始されると レジスタが、 空に、されます。 次に、 式の、優先順位が 評価されますが、 今回は 演算子優先度が、同じなので、 先頭から、 評価が、開始されます。 先頭から、読み出される事に なったので、 先ずは レジスタ= " a = " が、実行されます。 (※注:此処で、 レジスタ内が、文字列な事が 重要です。) 次は、 + aが、来ますが、 先に、示したように レジスタ内が、文字列なのを 考慮して、 文字列での、演算が 出来るか、見定めます。 出来そうですので +に、&の、動きをさせ、 a は、未指定ながら a.ToString() を、宛がい 数値の、10を、 文字列の"10" に、して、 結果、 レジスタ = レジスタ & "10" と、します、 演算結果は " a = 10" ですね。 次に、 +と、" b = "を、 読み込み、 同様に、 & " b = " と、変え、 レジスタ = レジスタ & " b = " を、実行します、 結果は、 " a = 10 b = " ですね。 次に、同様に +と、bを、 読み込み、 & b.ToString() に、変え、 レジスタ = レジスタ & b.ToString() を、行います。 結果は、 " a = 10 b = 20" ですね。 最後に、 演算が、残ってないので、 結果を、引数と して、 Console.WriteLine に、渡して、 此の、ステートメント(と、言うのかな?)が、 終わります。
お礼
ご回答誠に有難うございます。
- Nouble
- ベストアンサー率18% (330/1783)
あぁ、失礼しました。 私が、 記憶から、取り出す際に、 bの、値を 勘違いしました。 お詫びの上、訂正します、 済みません。 誤記 変数bから、 値を、取り出して 文字列に、読み替えて 末尾に、付け足し a = 10 b = 10 正記 変数bから、 値を、取り出して 文字列に、読み替えて 末尾に、付け足し a = 10 b = 20 訂正します。
- Nouble
- ベストアンサー率18% (330/1783)
+は、此の場合 文字列の、末尾に 付け足すようですね。 &と、同等でしょうかね? 動きとしては、 文字列"a="に、 変数aから、 値を、取り出し 文字列に、読み替えて 末尾に、付け足して a = 10 更に、 文字列"b="を、付け足し a = 10 b = 更に、更に、 変数bから、 値を、取り出して 文字列に、読み替えて 末尾に、付け足し a = 10 b = 10 ですね。
お礼
ご回答誠に有難うございます。 実行結果 a = 10 b = 20 ですよ。 参考書が間違っているのですか?
- Kaneyan-R
- ベストアンサー率42% (1340/3126)
> aには左右2つ+が付いていてbには左側しか+が付いていません。 これ「計算」ではなく、「文字を連結」しているだけです。 "わたしは"+"○○"+"人間です。" とすれば、結果は 「わたしは○○人間です。」 となる。 文字列の代わりに変数が入っているのです。
お礼
ナルホドですね。 ご回答誠に有難うございます。
補足
(" a = " + a + " b = " + b) "+ a +"ならば"+ b +"と思うのですが どう思考を変えればいいですか?
- kteds
- ベストアンサー率42% (1882/4440)
>この式の計算の仕方を教えてください。 この場合の「+」は加算演算子ではありません。 算術計算しているのではなくて「文字列を連結している」と考えてください。 したがって、コンパイラが「+」は「連結演算子」である、と判断して文字列として連結しています。
お礼
ご回答誠に有難うございます。 マダ、チョット、ピンとこないのですが、この式の構造を教えてください。
補足
(" a = " + a + " b = " + b) aには左右2つ+が付いていてbには左側しか+が付いていません。
- Kaneyan-R
- ベストアンサー率42% (1340/3126)
〉Console.WriteLine(" a = " + a + " b = " + b) 文字列「 a= 」の後にaの値を追加して、その後に文字列「 b= 」を追加、またその後にbの値を追加して、コンソールに出力せよ!ってこと。 aは10で、bは20って定義してるのだから、結果は「a = 10 b = 20」になる。 Console.WriteLine(" a の値は " + a + " bの値は " + b) にしてみてやってみそ。
お礼
ご回答誠に有難うございます。 少し解りかけてきました。
おらは ("曼珠沙華は " + a + " キンポウゲは " + b) という意味と捉える。 要するに ” と ” でくくられた中身はなんでも良い。 と判断。
- Nouble
- ベストアンサー率18% (330/1783)
確認できない、環境に ありながら、横から https://msdn.microsoft.com/ja-jp/library/xf2k8ftb(v=vs.110).aspx http://www.woodensoldier.info/computer/csharptips/45.htm 此を、 試してみて、頂けませんか? using System class Compare{ static void Main(){ int a = 10, b = 20; Console.WriteLine(" a = " & a.ToString() & " b = " & b.ToString()) } }
お礼
ナルホドですね。 ご回答誠に有難うございます。