• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:name[3] = seq + '0';の意味)

name[3] = seq + '0';の意味

このQ&Aのポイント
  • name[3] = sequence + '0';とはどういう意味か疑問に思っています。
  • プログラム中のname[3] = sequence + '0';の行が理解できません。
  • char型にint型を使っている理由が知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

これは、0から9までの数値をそれに対応する文字に変換するお手軽かつ問題のある手法です。 ご存知かもしれませんが、コンピューターでは文字は内部的には対応する数値で表されています。 ですから、C/C++ではchar形の中にあるのは文字ではなくその文字に対応する数値です。 したがって、 sequence + '0' は0という文字を表す数値にsequenceを足した値になります。文字と数値の対応はたいてい0という文字の次に1, 2, ..., 9と続くようになっていますので、結果、sequenceが0なら0という文字を表す数値、sequenceが1なら1という文字を表す数値、…という値になります。 参考キーワードとして「ASCIIコード」を調べるといいでしょう。 数値から文字への変換がたった1回の足し算で出来る、とってもお手軽な方法ですよね? でも、以下のように問題があるのであまり使わないほうがいい方法です。 ・0から9までしか使えない 上で書いたとおり、この方法でsequenceが0なら0という文字に、1なら1という文字に変換できます。……では、sequenceが-1だったら?10だったら? ・そもそも前提に疑問が残る 文字と数値の対応はたいてい0という文字の次に1, 2, ..., 9と続くようになっています。……でもあなたの処理系で本当に連続して並んでいますか?将来そのように並んでない処理系への移植がないと100%言い切れますか?

その他の回答 (2)

回答No.3

>あなたの処理系で本当に連続して並んでいますか? '0'~'9'の文字コードがこの順で連続していることは、Cの規格で保証されている。

回答No.1

僕は十分C言語の知識があるわけじゃないけど…例えば、こう書けばわかるだろうか? http://ideone.com/BzD4f tmp65じゃないよ? http://ideone.com/ilTLE tmp10じゃないよ? 自信はないけど、tmp10とかにしたかったらこうなるんじゃないかと。 http://ideone.com/XwpqO #sprintfとstrcatはそれぞれ、null characterをちゃんと付け足すようだ。 http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/ http://www.cplusplus.com/reference/clibrary/cstring/strcat/

関連するQ&A