- ベストアンサー
プログラムの打ち方でわからないところがあります
- マイクロソフトビジュアルスタジオで実行結果が実数:1234、16進数:ffff、8進数:17777、a=1234、b=-1、c=-1と表示させるプログラムを作成したが、bとcが65535と表示されてしまう。どこが間違っているのか教えていただけないでしょうか?
- プログラムの動作確認中に問題が発生しています。マイクロソフトビジュアルスタジオで実数:1234、16進数:ffff、8進数:17777、a=1234、b=-1、c=-1と表示させるプログラムを作成したが、bとcが65535と表示されてしまう。どこが間違っているのか教えていただけますか?
- マイクロソフトビジュアルスタジオで実行結果が実数:1234、16進数:ffff、8進数:17777、a=1234、b=-1、c=-1と表示されるプログラムを作成したが、bとcが65535と表示されてしまいます。どこが問題なのか教えてください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
> 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%E6%95%B0 0xffffが-1を表わすのは、16ビット符号付き整数のときです。 17bit以上の整数ならば、正の整数(10進の)65535です。 また、16ビットでも「符号無し(unsigned)」なら正の整数65535になります。 intは「実行環境で自然に扱えるビット幅」になっているケースが多いです。 最近一般人が触れるようなコンピュータは32bitが多いですから、intが32bitになっているケースが多いです。 32bitなら、0xffffは65535であり、表示の通りです。 実際に何ビットかは、intが扱える数値の範囲を調べればわかります。 limit.hをincludeして定数INT_MAXが(signed)intの最大値です。
その他の回答 (7)
- Tacosan
- ベストアンサー率23% (3656/15482)
unsigned short で受けたければ %hx でどうぞ>#2.
- Wr5
- ベストアンサー率53% (2173/4061)
…質問ちゃんと見ていなかった… printf()のフォーマットの問題じゃないし。 とりあえず、0xffffが-1とは限らないのは既に回答されているとおりです。 デフォルトで16ビット環境になるVCって…いつのなんでしょうかね?
- jjk65536
- ベストアンサー率59% (66/111)
コンパイラにLSI-C 試食版を使うと 期待通りの結果にならないかな。
お礼
ありがとうございました
プログラムは間違っていません。入力と環境が合っていないのです。 32ビット環境なら 実数:12345678 16進数:FFFFFFFF 8進数:37777777777 と入力してみましょう。 たぶんプログラミングの参考にされている資料が、MS-DOSのような16ビットCPU時代のものなのではないでしょうか?
お礼
なるほど 学校の教科書に書いてあったのを自宅で打ってみたのですが そういうことだったんですね
- D-Matsu
- ベストアンサー率45% (1080/2394)
sizeof(int)=2じゃないから。
お礼
ありがとうございました
- unacyo
- ベストアンサー率51% (35/68)
32ビット環境ならば、int型は32ビットですから、ffffffffと入れれば-1になりますよ。 変数定義のintをshortにすれば、お望みの結果になるかと。 ※私はscanfをつかわないので分からないですが、scanfの%xの受け取りにshort渡してOKでしたっけ?
お礼
うまく行きました!ありがとうございます
- Wr5
- ベストアンサー率53% (2173/4061)
>b、c共に65535と表示されてしまいます・・・ 正しい動作ですよね? printf()関数は「指定された書式」で表示していますよ。 >printf("a=%d b=%d c=%d",a,b,c); aもbもcも…10しか数文字列で出力しろ。 と指示していますよね? "%d"で。 >ffff=10進数でマイナスなどの意味は分かるのですが 型によるので正しい理解でもないような……
お礼
即回答いただきありがとうございました おっしゃる通りあいまいな知識でやってるからわからなくなるのですね・・・ もう少し勉強してがんばります