int型の変数を使ってメモリに格納できる整数値の最大値は2147483647です %d出力変換指定子を使って変数を使わず直接printf出力表示できる整数値の最大値も2147483647となります




int型の変数を使ってメモリに格納できる整数値の最大値は2147483647です %d出力変換指定子を使って変数を使わず直接printf出力表示できる整数値の最大値も2147483647となります




さてと


こちらはトラスト アンド フェイス銀行システム


改善作業をしているソーラーさん。


ソーラー 「そうか・・


char型の変数😊 英数字1文字または数値-128~127までの整数値を格納できます


int型の変数😊 -2147483648から2147483647までの整数値を格納できます


long型の変数😊 -2147483648から2147483647までの整数値を格納できます



float型の変数😊は


-3.4×(10の38乗)から- 3.4×(10の-38乗)までの実数値


0


3.4×(10の-38乗)から3.4×(10の38乗)までの実数値を格納できます




double型の変数😊は  


-1.7×(10の308乗)から-1.7×(10の-308乗)までの実数値


0


1.7×(10の-308乗)から1.7×(10の308乗)までの実数値を格納できます


float型やdouble型の変数は極端におおきな数値を格納できるんだね。


まあ、当然なのかな。


最近の科学計算においては桁数のおおい


数値計算多そうだし・・・


ためしに


int型の変数aに格納される値を1700000


として


int a=1700000;


として・・」


#include <stdio.h>


int a=1700000;


int main(void)

{

printf("%d\n",a);


return 0;

}


ソーラー


「このプログラムをコンパイルすると・・」


プログラムの実行結果(EAZY IDECの場合)

プログラムの実行結果(Visual Studioの場合)


1700000

続行するには何かキーを押してください_


ソーラー「あああっ」


ぐっジョブC「??」


ソーラー

「ピンポ~ン❕ 来た北ア ちゃんと


int型の変数 aに収められた数値1700000がprintf出力表示されてる💖」


ぐっジョブC


「そうなのぉ、変数aに格納された値1700000は


int型の変数に格納できる数値の範囲 -2147483648から2147483647に


おさまっているからちゃんとprintf出力表示されているみたいだね。」


ソーラー 「では、


int型の変数で格納できる数値の最大値


2147483647ではどうかな?ちゃんとprintf出力表示できるかな?。」


次のプログラム


#include <stdio.h>


int a=2147483647;


int main(void)

{

printf("%d\n",a);


return 0;

}

をうちこむソーラー。


ソーラー 「コンパイルっ。」


プログラムの実行結果(EAZY IDECの場合)

プログラムの実行結果(Visual Studioの場合)


2147483647

続行するには何かキーを押してください_


おおっすごい。


ちゃんと数値がただしくprintf出力表示されてる。


では


int型の変数に格納できる数値の範囲 -2147483648から2147483647に


おさまりきらない数値


11111111111などを 


変数aに格納してプログラムを実行すると ど~なるかな?


#include <stdio.h>




int main(void)

{


int a=11111111111;


printf("%d\n",a);


return 0;

}


プログラムの実行結果(EAZY IDECの場合)


-1773790777


プログラムの実行結果(Visual Studio2018の場合)


警告 C4305 '初期化中': '__int64' から 'int' へ切り詰めます。 Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 3

警告 C4309 '初期化中': 定数値が切り捨てられました。 Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 3


と表示されますが


プログラムを実行すると


-1773790777が実行されます。


プログラムの実行結果(Visual Studio2019の場合)


警告 C4309 '初期化中': 定数値が切り捨てられました。 Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 3

警告 C4305 '初期化中': '__int64' から 'int' へ切り詰めます。 Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 3



と表示されますが


プログラムを実行すると


-1773790777が実行されます。」




ソーラー「やっぱりint型の変数には格納できる数値の範囲があるんだね


それを超えた値をint型の変数に格納しprintf出力表示するとおかしな結果がでてくるんだね」


ぐっジョブC 「そうだね。ソーラー。」


ともに喜ぶぐっジョブC。


ソーラー「


私たちは


以前のエピソードで マックスが調べたので


printf関数の第2引数に



                printf("%d\n",111000);


のように

                😊直接、数値入力したときに😊


その数値がそのまま正しくprintf出力表示される入力数値の桁数は


最大9桁(一部10桁まで)としっているけど・・・


正確には


どの数値が


直接printf出力表示できる最大値かまではしらなかったんだよね~」


ぐっジョブC 「そのとおり。」


ソーラー 「でも 


ぐっジョブCの


🍓int型の変数が格納できる最大値は2147483647🍓の記述から


多分


🍓printf関数の第2引数に変数を用いないで 


直接、整数値を入力したときに


正しくprintf出力表示できる入力数値の


最大値も2147483647と🍓のが予想されるよね


実際にためしてみよっか。


👇

#include <stdio.h>


int main(void)

{

printf("%d\n",2147483647);


return 0;

}


をうちこむソーラー。



ソーラー「さあて コンパイルっ!」




プログラムの実行結果

(EAZY IDECの場合)

(Visual Studioの場合)


2147483647


でだしは上々ってところだね


やっぱりちゃんと表示されたね


次は


int型の変数の格納できる数値の範囲の最大値である


2147483647


1💖を足した


2147483648🌞


printf("%d\n",2147483648);


を実行することにより


表示されるかためしてみるね。


もし


プログラムの実行結果に


変な結果が表示されたら


printf関数の第2引数に直接 数値を代入して


%d出力変換指定子をつかって表示できる数値の最大値は


2147483647


となるよね。


そのプログラムはこちらです

👇


#include <stdio.h>


int main(void)

{

printf("%d\n",2147483648);


return 0;

}


プログラムの実行結果(Visual Studio2019の場合)


警告 C6328 サイズの不一致: '__int64' が _Param_(2) として渡されました。'int' が 'printf' への呼び出しに必要です。 Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 5

警告 C4477 'printf' : 書式文字列 '%d' には、型 'int' の引数が必要ですが、可変個引数 1 は型 '__int64' です Project2 C:\Users\solar\source\repos\Project2\Project2\program1.cpp 5


と表示されますが


-2147483648


C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 2124792) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...


と表示されます




ソーラー「


2147483648


が表示されなければならないのに


-2147483648


が表示されたね


printf("%d\n",2147483647);


を実行して


2147483647


は表示できて


printf("%d\n",2147483648);


を実行して


2147483648


は表示できないみたいだね




これで


🍓printf関数の第2引数に変数を用いないで🍓


  🍓直接、整数値を入力したときに🍓


正しくprintf出力表示できる入力数値の


最大値も


printf関数の第2引数に変数を用いた場合と同じ


2147483647となるのがわかったね




int型の変数の格納できる数値の範囲は


-2147483648から2147483647


ナイス情報だね。


いいデータをありがとう。


ぐっジョブC。


この情報がなかったら


🍓printf関数の第2引数に変数を用いないで🍓


  🍓直接、整数値を入力したときに🍓


正しくprintf出力表示できる入力数値の


最大値が


2147483647となるのはわからなかったよ」


ぐっジョブC 「いや。いや、僕はなにもしてないよ。


ただ


僕のサイトにかいてあるだけだよ・・・ 」


うれしそうなサイト、ぐっジョブC


🌳🌳🌳🌳🌳


ここで


printf関数の第2引数に


直接、整数値入力するとは

👇

#include <stdio.h>


int main(void)

{

printf("%d\n",10000);


return 0;

}


プログラムの実行結果(EAZY IDECの場合)

プログラムの実行結果(Visual Studioの場合)


10000

👆


このプログラムのように


整数値10000を 


直接printf( )の第2引数に


かきこむことを指しています


それに対し


変数aを媒介するときとは

👇

#include <stdio.h>


int main(void)

{

int a=10000;

printf("%d\n",a);

return 0;

}


プログラムの実行結果(EAZY IDECの場合)

プログラムの実行結果(Visual Studioの場合)


10000


👆

このプログラムのように変数aをとおして


10000をprintf表示する方法を指しています。



               😊実は😊


printf("%d\n",10000);


と記述された場合は数値10000は


自動的に変数の型😊int型の形式😊を用いてメモリに格納されることになります


                     solarplexussより)

🌳🌳🌳🌳🌳










ソーラー 「


ぐっジョブCのサイトにのっている


int型の変数の格納できる数値の範囲 -2147483648から2147483647


の情報をつかって



変数aを媒介するときも


直接printf関数の第2引数に 数値をかきこむ場合も


printf出力表示される数値の最大値は2147483647なのがわかったね。


では 


直接 printf関数の第2引数に2147483648を数値入力したとき


どのような コンパイル結果が得られるかためしちゃおっかな~


なにか 面白データがえられるかもしれないぞっと!!\(^o^)/」






(👆それちょうど、いま、ついさっき just やったばかりですよ・・・ solarplexussより)





銀行業務を完全に忘れかかるソーラーさんでした。




ぐっジョブC 

「おおぉぉぉ~~ソーラー\(^^)/ その意気だ~~。」


ぐっジョブCも何しているのか忘れかかっています。







  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る