• ベストアンサー

C言語

演算がうまくできなくてこまっています。 int hogeと定義した変数があります。 プログラムの途中で色々代入をし終えた結果、 printf(%d,hoge)とすると「49」と表示、 printf(%c,hoge)とすると「1」と表示されます。 %dは10進法のはずなのになぜか49となります。 今このhogeを用いて計算をしたいのです 例えば、hoge = hoge*5+1のように純粋に10進法で計算したのですが、 このままだと49*5+1=...となってしまします。 どうすれば改善出来ますか?

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

  • ベストアンサー
  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.6

アスキーコード表を見ると理解が早いのではないかと思います。 http://e-words.jp/p/r-ascii.html この表の10進で49のところは、文字が1となっています。 ですから、%cで1が出力されるのです。

その他の回答 (5)

回答No.5

int hogeの中身を見ればわかります。 コンピュータ内部では1と0の2進法であることはご存知とおもいます。 中身は「0110001」となっています。 これを数字(十進)とみると49になります。(1+16+32=49) これを文字とみると「1」と決められています。 int で定義したものは終始数字として使用するのが普通です。 printf(%c,hoge)は意味がないといえます。49が本来の意味です。

  • digitalian
  • ベストアンサー率29% (323/1104)
回答No.4

hoge==49 は正しい結果を返しています。 アスキーコードの '1' が49番です。

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.3

>printf(%c,hoge)とすると「1」と表示されます。 ということは、hoge = '1'; と書いたんですね。 hoge = 1; でなく。 hoge = '1'; は、 hoge = 49; と同じ意味ですよ。 hoge = buffer[i]; とかしたのであれば、isdigit(hoge) で数字かどうか調べて、数字なら num -= '0'; で文字が値になります。

  • mainPC
  • ベストアンサー率21% (62/287)
回答No.2

49にならない予定のコードでしたら、printfに行く前にバグがあります。 hogeに入っている値は0x31(49)になっているようですので。 ※49は文字コードでは0x31('1')になります 今一度、色々代入をする処理の見直しをしてみては如何でしょうか。 ※よくあるバグは、変数hogeに初期値を入れてないってのがありますが。。。

  • f272
  • ベストアンサー率46% (8620/18438)
回答No.1

どのように改善したいの? hogeに49という値が代入されているんでしょうから,当たり前の挙動のようにしか見えませんが...

関連するQ&A