天国にいけるC言語入門 シーズン1 パソコン超初心者がゼロから東方風シューティングをつくる編 ver.0.4.15.789 RELIEF
コンピュータに扱える数値には範囲があります その9☆マックス 瞑想中です
コンピュータに扱える数値には範囲があります その9☆マックス 瞑想中です
コンピュータに扱える数値には範囲があります その9☆マックス 瞑想中です
この897545*100000だけを記述して実行すると・・・
近くに置いてあるノートパソコンのところに行き
パソコンを起動させる。
エディタにプログラムをかきこむ。
#include <stdio.h>
int main(void)
{
printf("%d\n",897545*100000 );
return 0;
}
897545*100000を計算するために
897545*100000を
printf関数の第2引数に記述し
実行すると・・・
プログラムの実行結果(EAZY IDECの場合)
-439813216
続行するには何かキーを押してください_
と表示されます
プログラムの実行結果(Visual Studio2018の場合)
__________________________________
警告 C4307 '*': 整数定数がオーバーフローしました。 Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 6
とエディタ画面下部に表示されますが
__________________________________
デバッグなしで実行すると
-439813216
続行するには何かキーを押してください_
と表示されます
プログラムの実行結果(Visual Studio2019の場合)
__________________________________
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
警告 C26450 演算のオーバーフロー: '* の操作はコンパイル時にオーバーフローを引き起こします。オペランドを格納する幅の広い型を使用してください (io.1)。 Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 6
警告 C4307 '*': 署名された整数定数のオーバーフロー Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 6
とエディタ画面下部に表示されますが
__________________________________
デバッグなしで実行すると
-439813216
C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 307308) は、コード 0 で終了しました。
このウィンドウを閉じるには、任意のキーを押してください...
と表示されます
やはり・・・897545*100000を計算することができず
エラーがでるのか・・・
897545*100000を普通に電卓で計算すると
89754500000・・・
ならば
89754500000・・・
この数値をprintf関数の第2引数に記述し
実行すると
#include <stdio.h> int main(void)
{
printf("%d\n",89754500000 );
return 0;
}
プログラムの実行結果(EAZY IDECの場合)
-439813216
続行するには何かキーを押してください_
が表示されます
プログラムの実行結果(Visual Studio2018の場合)
警告 C4307 '*': 整数定数がオーバーフローしました。 Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 6
と表示されますが
デバッグなしで実行すると
-439813216
続行するには何かキーを押してください_
が表示されます
プログラムの実行結果(Visual Studio2019の場合)
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
警告 C6328 サイズの不一致: '__int64' が _Param_(2) として渡されました。'int' が 'printf' への呼び出しに必要です。 Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 4
警告 C4477 'printf' : 書式文字列 '%d' には、型 'int' の引数が必要ですが、可変個引数 1 は型 '__int64' です Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 4
と表示されますが
デバッグなしで実行すると
-439813216
C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 309464) は、コード 0 で終了しました。
このウィンドウを閉じるには、任意のキーを押してください...
が表示されます
プログラムの実行結果は
897545*100000と記述しても89754500000と記述しても
両方とも
-439813216と同じ・・・
ということは
おそらく
コンピューターの中では一応897545*100000=89754500000は
計算されているようだな・・・・
そうだひらめいた。
89754500000は11桁の整数だ。
11桁の整数は正しく
コマンドプロンプト画面にprintf出力表示できないなら、
正しくprintf出力表示される桁数もあるに違いない・・
それが何桁かをしらべるには・・・
1桁の整数、2桁の整数、3桁の整数・・・・・・・・
を順番にprintf関数の第2引数にかきこんで実行して
何桁までの桁数が正しくコマンドプロンプト画面に表示
されるか確かめればよい・・・確実かも・・・・・・
ははははは
我ながら名案だ・・・
つまり
1 (1桁)
12 (2桁)
123 (3桁)
1234 (4桁)
12345 (5桁)
123456 (6桁)
1234567 (7桁)
12345678 (8桁)
123456789 (9桁)
1234567891 (10桁)
12345678912 (11桁)
この11個の数値をprintf出力表示してみればよいのだ・・・
11桁といえばprintf出力表示に失敗した
89754500000も11桁の整数だ・・・
89754500000をprintf出力表示したなら
-439813216
が表示されるのなら
おそらく11桁の12345678912 (11桁)
も
12345678912
の
代わりに変な数値がprintf出力表示されるんじゃないかな・・・
・・・
では これらの11個の数値を
#include <stdio.h>
int main(void)
{
printf("%d\n",1 );
printf("%d\n",12 );
printf("%d\n",123 );
printf("%d\n",1234 );
printf("%d\n",12345 );
printf("%d\n",123456 );
printf("%d\n",1234567 );
printf("%d\n",12345678 );
printf("%d\n",123456789 );
printf("%d\n",1234567891 );
printf("%d\n",12345678912 );
return 0;
}
コンパイルっ
プログラムの実行結果
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567891
-539222976
おおっでたでた
10桁までは正しくprintf出力表示されるみたいだ・・・
11桁の12345678912は
-539222976とprintf出力表示されたか・・・
うまく
12345678912
は
12345678912
と
printf出力表示されないか・・・
つまり
10桁の整数までただしく出力できるということか・・・
ほかの10桁の整数もためしてみるか・・・
1784948595
3456789999
2349098900
これら10桁の数値を
printf関数の第2引数にかきこんで実行してみよう。
#include <stdio.h>
int main(void)
{
printf("%d\n", 1784948595);
printf("%d\n", 3456789999);
printf("%d\n", 2349098900);
return 0;
}
コンパイルっ
プログラムの実行結果(EAZY IDECの場合)
プログラムの実行結果(Visual Studioの場合)
1784948595
-838177297
-1945868396
むー10桁もただしくprintf出力表示されないか・・・・?
しかし
printf("%d\n", 1784948595);
の実行結果は
1784948595
と成功している・・・・・?
・・・・・・
printf("%d\n", 3456789999);
の実行結果は
-838177297
printf("%d\n", 2349098900);
の実行結果は
-1945868396
この2つはなぜか失敗している・・・・・?
10桁は一部成功している・・・
10桁には出力可能な整数値とそうでない整数値があるようだな・・・
このことは
コンピュータが 扱える数値の範囲の限界が
この10桁の整数値内の どこかにあることをあらわしている・・・
10桁ならば
なんでもprintf出力表示できるとはいえない・・・か・・・
だめか・・・・
では・・・
178494859
345678999
234909890
これらの9桁の数値ならどうだ・・・・
#include <stdio.h>
int main(void)
{
printf("%d\n",178494859 );
printf("%d\n",345678999 );
printf("%d\n",234909890 );
return 0;
}
コンパイルっ
プログラムの実行結果(EAZY IDECの場合)
プログラムの実行結果(Visual Studioの場合)
178494859
345678999
234909890
続行するには何かキーを押してください_
おおっ3つともただしくprintf出力表示された・・・
これで正しくprintf出力表示できる整数値は9桁できまりか・・・
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます