• ベストアンサー

char/long int等の型の範囲を表示するCのプログラムを記述したい

limits.hをインクルードして、CHAR_MIN/CHAR_MAX、LONG_MIN/LONG_MAXを表示すれば出来るみたいですが、limits.hを使わないで表示する方法はあるのでしょうか。(特にそうする必要があるわけではなく、興味本位なのですが。。)

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

ものすごくベタな方法ですが。 ひたすらインクリメントしてオーバーフローした時点でインクリメント前と後を表示すれば、それが最大値・最小値になります。 #デクリメントしてアンダーフロー、でも可 以下gcc 3.4.4で確認したコードです。 #include<stdio.h> int main() { char max, min max = min = 0; while(++min > max) max = min; printf("char max=%d, min=%d\n", max, min); return 0; }

redhat_001
質問者

お礼

有り難うございました。出来ました。 同じ要領で今度はunsigned intとunsigned longの範囲を表示させようとしたのですが、どちらも最小値0、最大値が-1になってしまいます。 unsigned int unsgmin, unsgmax; unsgmin = unsgmax = 0; while(++unsgmin > unsgmax) { unsgmax = unsgmin; } printf("unsigned int min is:\t\t%d\n", unsgmin); printf("unsigned int max is:\t\t%d\n", unsgmax); printfの%dを何かに変えないといけないのでしょうか?

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

unsignedなので%dではなくて%uになります。 参考URLにLinuxでのprintf()のマニュアルを置いておきますのでそちらも参考にしてください。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
redhat_001
質問者

お礼

出来ました。有り難うございました。

関連するQ&A