🌳printf("%d",10);と記述された場合 この数値データ10は どのような形式でコンピュータのメモリに格納されているのでしょうか🌳



🌳printf("%d",10);と記述された場合 この数値データ10は どのような形式でコンピュータのメモリに格納されているのでしょうか🌳




🌳ここで ソーラーが入り込んだ世界から もどって 


マックスとソーラーに printf関数の第2引数について


いろいろ解説してもらいましょう。🌳


それでは


マックスさん よろしくおねがいします。


マックス「はい、はい わかった まっかせなさ~い😊」


ソーラー「は~い 一時 入り込んだ世界からもどってきました


ソーラーです


ただいま トラスト アンド フェイス 銀行で


コンピュータプログラムのメンテナンスをしています。」


マックス「入り込んだ世界で 楽しそうに やってるじゃないか?


このぉ😝」


ソーラー「本当 いいところなんだな ここが 


マックスもきてみませんか?」


マックス「そうだな ぜひとも 俺もいってみたいな。


後ほど伺うとしよう」


ソーラー「いま


#include <stdio.h>


int main(void)

{

float a;

a=1.05;


printf("あなたの預金額はただいま%f円です。\n",10000*a);

return 0;

}


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


10499.999523


このプログラムの実行結果を


10499.999523から15000と表示されるように


ぐっジョブCと遊んでいたところなんです。


このエピソードでは 一時 そこからはなれて


お話を進めていきたいとおもうんだ。


ちょっとしたおさらいも あったほうがいいんじゃないかなと


おもってね(*^^)v」


マックス 「なははははははは(´▽`)


そうか・・・


では・・・


printf("%d",10);と記述された場合 


まず 


文字列データ"%d"と数値データ10が


それぞれ別々のコンピュータのメモリに格納されてから


%d出力変換指定子のはたらきにより 


文字列データ"%d"の%dの部分に10がはめこまれて


コマンドプロンプト画面に


プログラムの実行結果


10


とprintf出力表示されるのだろう


そうだったな ソーラー


ところで この整数値データ10は


どのような形で、コンピュータ内のメモリに格納されているんだ?」


ソーラー「待ってましたよ その言葉を ああっ麗しい☆☆☆


まちこがれていたんだ。 その言葉を・・


うるるん💦 うるるん💦


short

long

int

float

double

変数を格納する型だったよね


その変数が整数値を格納するなら


変数宣言において


short型

long型

int型

使用され


その変数が実数値を格納するなら


変数宣言において


float

double型

使用されるいうわけなんだね。


ところで



このように👇 printf関数の第2引数に直接 整数値が記述された場合


  printf("%d",10); 


👆

このprintf関数の第2引数である整数値10 は



short

long

int

float

double

などの様々な


変数を格納する型のうちの1つである


整数値を格納する変数の変数宣言をおこなうint型を用いて


つまり 整数の型int型の形式をもちいて


コンピュータのメモリに格納されていきます。


次に


このように👇 printf関数の第2引数に が記述された場合


printf("%f",2.8478);

👆

この実数値2.8478 は



実数値を格納する変数の変数宣言をおこなうときに用いられるdouble型を用いて


つまり 実数の型double型の形式をもちいて


コンピュータのメモリに格納されていきます。


そうだね。


なぜ このような仕組みになっているのかというと


メモリに格納された整数値10のprintf出力表示を行うのに


次のプログラムのように

👇

#include <stdio.h>


int main(void)

{

int a;

a=10;

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

return 0;

}

👆

自分で


aのint型の変数宣言、初期化を行い


数値10をint型の変数aに格納してから


printf関数の第2引数に変数aを記述し


変数aに格納されている数値10をprintf出力表示させるのは


(変数宣言、初期化をおこなうので)手間がかかりますから


printf("%d",10); 


のような


プログラムの表記法が考え出されたのかもしれませんね。


あるいは


逆に


最初


printf("%d",10);


のような表記法が考え出されたんだけど


このままでは


10の部分は固定化されて変更できないので


10の部分の値を簡単に変更できるように


int a;

a=10;

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


のような変数をもちいるシステムが生み出されたのかもしれませんね」




マックス 「


printf("%d",10);

の中の10は

整数の型int型の形式で


printf("%f",2.8478);

の中の2.8478は

実数の型double型の形式で


コンピュータのメモリに格納されていたのか・・・


そうだったのか・・・


やるじゃないか ソーラー」


ソーラー 「いやあ ははははは(´▽`)


このprintf関数の第2引数に記入された整数値を格納する


int型は


-2147483648~2147483647までの


範囲にある整数値を格納することができます。


ということは


🍅printf("%d",整数値);


の形式で


直接整数値をprintf文の第2引数に書き込んだ場合


printf出力表示できる


int型に格納できる数値の範囲である


-2147483648~2147483647までの値となるんです。🍅


同様に


このprintf関数の第2引数に記入された実数値を格納する


double型はfloat型よりも大きな値を格納することができ


正の数においては


float   3.4×(10の-38乗)から3.4×(10の38乗)

double 1.7×(10の-308乗)から1.7×(10の308乗)


の範囲にある実数値を格納することができます。


ということは


🍅printf("%f",実数値);

の形式で


直接 実数値をprintf関数の第2引数に書き込んだ場合


printf出力表示できる


double型で格納できる数値の範囲である


1.7×(10の-308乗)から1.7×(10の308乗)までの値となります。🍅





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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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