- ベストアンサー
C言語
演算がうまくできなくてこまっています。 int hogeと定義した変数があります。 プログラムの途中で色々代入をし終えた結果、 printf(%d,hoge)とすると「49」と表示、 printf(%c,hoge)とすると「1」と表示されます。 %dは10進法のはずなのになぜか49となります。 今このhogeを用いて計算をしたいのです 例えば、hoge = hoge*5+1のように純粋に10進法で計算したのですが、 このままだと49*5+1=...となってしまします。 どうすれば改善出来ますか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
アスキーコード表を見ると理解が早いのではないかと思います。 http://e-words.jp/p/r-ascii.html この表の10進で49のところは、文字が1となっています。 ですから、%cで1が出力されるのです。
その他の回答 (5)
- komatta_osiete
- ベストアンサー率38% (19/49)
int hogeの中身を見ればわかります。 コンピュータ内部では1と0の2進法であることはご存知とおもいます。 中身は「0110001」となっています。 これを数字(十進)とみると49になります。(1+16+32=49) これを文字とみると「1」と決められています。 int で定義したものは終始数字として使用するのが普通です。 printf(%c,hoge)は意味がないといえます。49が本来の意味です。
- digitalian
- ベストアンサー率29% (323/1104)
hoge==49 は正しい結果を返しています。 アスキーコードの '1' が49番です。
- notnot
- ベストアンサー率47% (4900/10361)
>printf(%c,hoge)とすると「1」と表示されます。 ということは、hoge = '1'; と書いたんですね。 hoge = 1; でなく。 hoge = '1'; は、 hoge = 49; と同じ意味ですよ。 hoge = buffer[i]; とかしたのであれば、isdigit(hoge) で数字かどうか調べて、数字なら num -= '0'; で文字が値になります。
- mainPC
- ベストアンサー率21% (62/287)
49にならない予定のコードでしたら、printfに行く前にバグがあります。 hogeに入っている値は0x31(49)になっているようですので。 ※49は文字コードでは0x31('1')になります 今一度、色々代入をする処理の見直しをしてみては如何でしょうか。 ※よくあるバグは、変数hogeに初期値を入れてないってのがありますが。。。
- f272
- ベストアンサー率46% (8620/18438)
どのように改善したいの? hogeに49という値が代入されているんでしょうから,当たり前の挙動のようにしか見えませんが...