-- int型の最大値 (2009/04/24 22:16) - 964PV

プログラミングの授業のTAをこっそりやっています。
まともにC言語に関わったのは久し振り。

本日のテーマは、「int型の変数に代入できる最大の数は何か?」という課題です。
もし、暇だったら考えてみてください。

普通の課題では満足しない人のための課題なのだけど、面白い回答があったのでこっそり紹介します。

まずは自分で作ったプログラム。
読めるものなら読んでみろ!

#include <stdio.h>

main(){

  int before, after = 0;

  while( (before = after) < ++after);
  printf("max: %d\n", before);

}


実行すれば、2147483647という出力が得られます。
考え方がシンプルなだけに、型をchar等に変えるだけで、他の型の最大値も得られます。

ここからは2年生の回答。
まずは「良く知ってるなー」という回答。

#include <stdio.h>
#include <limits.h>

main(){

  printf("max: %d\n", INT_MAX);

}


limits.hというヘッダに、この課題の答えが書かれているらしい!
実際にそのヘッダファイルを探して開いてみると。

/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MIN       (-INT_MAX - 1)
#  define INT_MAX       2147483647


これを知っているということは、きっと使っているということで。
つまり、intの桁あふれに注意しながらプログラムしているということでしょう。
素晴らしい。

続いて、「これ動くんだ?」というプログラム。

#include <stdio.h>

main(){

  int max;

  scanf("%d", &max);
  printf("max: %d\n", max);

}


これは実行しただけで答えが得られるわけではないです。
実行すると入力を求められるので、テキトーに大きい数字(例えば10000000000000)を入力します。
それをmaxという変数に代入して、表示しているだけ。

これが不思議と、2147483647という出力をするんです。

もちろん、100とかっていう小さい入力ではダメです。
2147483647以上の大きな数字を入力すると、オーバーした分は綺麗に切り捨てられるというわけ。

これはscanfを通しているおかげだと思いますが、scanfの方は残念ながらソースが見つけられず。
たぶんコンパイル済みなのでローカルを探しても出てこないんでしょう。

あと、int型が4バイトで符号付きの型であることから、2の31乗の周辺の値を実際にprintfさせてみて境界値を探している学生もいました。
先生としては一番ほっとする回答だと思います。

みんな優秀だなー。
勉強になるなー。

-- 参考文献

-- 関連項目
すもいち 「beforeのとこ,初期化してないと最大値が代入されてるってことなん?よくわからん・・・」 (2009/04/25 04:43)
かってぃ 「要するに、桁が溢れてafterの方が小さくなるまで1つずつ数を増やしていくってだけです。beforeはwhileのかっこの中で初期化しているよー。before = afterでちゃんと0からスタートしてます。」 (2009/04/25 08:54)

名前
コメント
更新情報
コメント「Johnf318さん」(2015/11/30 06:26)
コメント「もちもちさん」(2015/10/15 01:25)
コメント「しもさんさん」(2014/07/11 12:57)
コメント「ljilchさん」(2014/06/28 02:40)
コメント「ledogoさん」(2013/06/25 23:11)
コメント「tcrwefcxtjさん」(2013/06/25 21:00)
コメント「gihjfldrwさん」(2013/06/23 08:07)
コメント「yfaewyqviさん」(2013/06/23 03:12)
コメント「Papan3世さん」(2013/05/09 11:48)
コメント「Papan3世さん」(2013/05/09 11:46)
コメント「Papan3世さん」(2013/05/09 11:45)
コメント「Papan3世さん」(2013/05/09 11:40)
コメント「Papan3世さん」(2013/05/09 11:37)
コメント「さん」(2013/04/21 01:57)
コメント「上田朋哉さん」(2013/04/08 02:43)
コメント「syazaqxさん」(2013/02/14 11:36)
コメント「seqdspさん」(2012/11/08 02:34)
コメント「kzghepさん」(2012/11/03 21:45)
コメント「さん」(2012/10/16 08:05)
コメント「yflpfhftbvpさん」(2012/07/21 14:51)
コメント「szodydさん」(2012/06/22 15:38)
コメント「nkhkajuttzさん」(2012/06/20 03:23)
コメント「jjomlllxさん」(2012/02/13 12:34)
コメント「さん」(2011/10/28 14:11)
コメント「onmqdqobrpdさん」(2011/10/15 03:57)
コメント「さん」(2011/08/20 14:05)
コメント「さん」(2011/06/26 20:59)
コメント「bfixkuohhzoさん」(2011/06/10 00:04)
コメント「さん」(2011/05/24 13:47)
コメント「dyecrnさん」(2011/05/12 20:06)
コメント「atkyzmさん」(2011/03/02 07:59)
日記「新年を迎えまして(4)[1541]」 (2011/01/23 00:17)
電子工学「TwitCrew[1895]」 (2011/01/02 06:22)
コメント「かってぃさん」(2010/12/07 15:49)
コメント「通りすがりさん」(2010/12/02 23:37)
電子工学「ソーシャル目覚まし[2750]」 (2010/11/14 07:41)
その他「自己紹介[7445]」 (2010/10/16 01:36)
コメント「かってぃさん」(2010/10/15 02:03)
コメント「えんぺらあさん」(2010/10/15 02:00)
電子工学「性格の木[1683]」 (2010/10/15 01:43)
PR

プロフィール
名前: かってぃ
職業: 学生、性別: 男性、年齢: 22歳、住所: 横浜市
理系用語
コンテンツ
トップページ
自己紹介
電子工学

料理
勉強
日記
ノート
自転車
その他
本棚
一言メモ
電子回路コレクション
ヘッドホンアンプのまとめ
リンク
三度の飯とエレクトロン
choilog
TwitCrew
Questo
Ropi.me
studylog
つい、投票。
tvtw - ツイッターでテレビ実況
理系用語
理系用語bot on twitter

ぷよぷよ!!クエスト 攻略
気ままでいたいがあんまり気ままではない感じのブログ
魚料理と簡単レシピ
素晴らしき哉,電気工学的人生!
アンチ・バベルの塔
大学生ブログランキング