アプリ版:「スタンプのみでお礼する」機能のリリースについて

マイクロソフトビジュアルスタジオで 

実行結果が 実数:1234 16進数:ffff 8進数:17777 a=1234 b=-1 c=-1と表示させる
プログラムを作ろうと思ったのですが

#include<stdio.h>
void main(void)
{
int a,b,c;

printf("整数:"); scanf("%d" , & a);

printf("16進数:"); scanf("%x", &b);

printf("8進数:"); scanf("%o", & c);

printf("a=%d b=%d c=%d",a,b,c);
}

このように打つと、 b、c共に65535と表示されてしまいます・・・
どこが間違ってるのか教えていただけないでしょうか?

ffff=10進数でマイナスなどの意味は分かるのですが

A 回答 (8件)

>b、c共に65535と表示されてしまいます・・・



正しい動作ですよね?
printf()関数は「指定された書式」で表示していますよ。

>printf("a=%d b=%d c=%d",a,b,c);

aもbもcも…10しか数文字列で出力しろ。
と指示していますよね?
"%d"で。

>ffff=10進数でマイナスなどの意味は分かるのですが

型によるので正しい理解でもないような……
    • good
    • 0

32ビット環境ならば、int型は32ビットですから、ffffffffと入れれば-1になりますよ。


変数定義のintをshortにすれば、お望みの結果になるかと。

※私はscanfをつかわないので分からないですが、scanfの%xの受け取りにshort渡してOKでしたっけ?
    • good
    • 0
この回答へのお礼

うまく行きました!ありがとうございます

お礼日時:2012/05/27 12:14

sizeof(int)=2じゃないから。

    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2012/05/27 12:18

> ffff=10進数でマイナスなどの意味は分かるのですが



間違いはここです。理解が不十分です。

負の整数を表現するのに、「(2進法での)2の補数」と呼ばれる表現方法がよく使われています。
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C …

0xffffが-1を表わすのは、16ビット符号付き整数のときです。
17bit以上の整数ならば、正の整数(10進の)65535です。
また、16ビットでも「符号無し(unsigned)」なら正の整数65535になります。

intは「実行環境で自然に扱えるビット幅」になっているケースが多いです。
最近一般人が触れるようなコンピュータは32bitが多いですから、intが32bitになっているケースが多いです。
32bitなら、0xffffは65535であり、表示の通りです。

実際に何ビットかは、intが扱える数値の範囲を調べればわかります。
limit.hをincludeして定数INT_MAXが(signed)intの最大値です。
    • good
    • 0

プログラムは間違っていません。

入力と環境が合っていないのです。

32ビット環境なら
 実数:12345678
 16進数:FFFFFFFF
 8進数:37777777777
と入力してみましょう。

たぶんプログラミングの参考にされている資料が、MS-DOSのような16ビットCPU時代のものなのではないでしょうか?
    • good
    • 1
この回答へのお礼

なるほど 学校の教科書に書いてあったのを自宅で打ってみたのですが
そういうことだったんですね

お礼日時:2012/05/27 12:15

コンパイラにLSI-C 試食版を使うと


期待通りの結果にならないかな。
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2012/05/27 12:18

…質問ちゃんと見ていなかった…


printf()のフォーマットの問題じゃないし。

とりあえず、0xffffが-1とは限らないのは既に回答されているとおりです。

デフォルトで16ビット環境になるVCって…いつのなんでしょうかね?
    • good
    • 0
この回答へのお礼

即回答いただきありがとうございました

おっしゃる通りあいまいな知識でやってるからわからなくなるのですね・・・
もう少し勉強してがんばります

お礼日時:2012/05/27 12:17

unsigned short で受けたければ %hx でどうぞ>#2.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!