• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラムの打ち方でわからないところがあります)

プログラムの打ち方でわからないところがあります

このQ&Aのポイント
  • マイクロソフトビジュアルスタジオで実行結果が実数: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と表示されてしまいます。どこが問題なのか教えてください。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

> 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)
回答No.8

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

すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.7

…質問ちゃんと見ていなかった… printf()のフォーマットの問題じゃないし。 とりあえず、0xffffが-1とは限らないのは既に回答されているとおりです。 デフォルトで16ビット環境になるVCって…いつのなんでしょうかね?

littbus
質問者

お礼

即回答いただきありがとうございました おっしゃる通りあいまいな知識でやってるからわからなくなるのですね・・・ もう少し勉強してがんばります

すると、全ての回答が全文表示されます。
  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.6

コンパイラにLSI-C 試食版を使うと 期待通りの結果にならないかな。

littbus
質問者

お礼

ありがとうございました

すると、全ての回答が全文表示されます。
noname#208507
noname#208507
回答No.5

プログラムは間違っていません。入力と環境が合っていないのです。 32ビット環境なら  実数:12345678  16進数:FFFFFFFF  8進数:37777777777 と入力してみましょう。 たぶんプログラミングの参考にされている資料が、MS-DOSのような16ビットCPU時代のものなのではないでしょうか?

littbus
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

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

littbus
質問者

お礼

ありがとうございました

すると、全ての回答が全文表示されます。
  • unacyo
  • ベストアンサー率51% (35/68)
回答No.2

32ビット環境ならば、int型は32ビットですから、ffffffffと入れれば-1になりますよ。 変数定義のintをshortにすれば、お望みの結果になるかと。 ※私はscanfをつかわないので分からないですが、scanfの%xの受け取りにshort渡してOKでしたっけ?

littbus
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>b、c共に65535と表示されてしまいます・・・ 正しい動作ですよね? printf()関数は「指定された書式」で表示していますよ。 >printf("a=%d b=%d c=%d",a,b,c); aもbもcも…10しか数文字列で出力しろ。 と指示していますよね? "%d"で。 >ffff=10進数でマイナスなどの意味は分かるのですが 型によるので正しい理解でもないような……

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう