つまり いきなり直接、数値データ1がint型の変数aに格納されているのではありません

int a=1; の実行においては int型の形式でメモリに格納された数値データ1 がint型の変数aに格納されることになります


ソーラー「それでは


今日は


とってもとっても基本的で大切な



          🌞int a=1;🌞


が実行されるときの仕組みを見ていきたいと思います」



#include <stdio.h>


int main(void){


int a=1;


return 0;

}


ビルド実行結果


1


ソーラー「


みなさん


aの変数宣言、初期化


int a=1;


はよく見かける


基本的な命令文だね



この命令文では



         🌞まず🌞


数値データ1



int型の形式でメモリに格納されることになります




その後



int型の変数aに


int型の形式でメモリに格納された数値データが1が格納されているんだよ



いきなり


int型の変数aに数値データ1が代入されているわけではないんだ」


アレサ「😊


int a;


短い命令文の中にそのような仕組みがあるのですね」


ソーラー「で(^_-)-☆


次のプログラムをみてよ


👇


#include <stdio.h>


int main(void) {


int a = 1.12345;


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


return 0;


}


警告文


警告 C4244 '初期化中': 'double' から 'int' への変換です。データが失われる可能性があります


とともに



ビルド実行結果


1


が表示されます


ソーラー「このプログラムの


int a = 1.12345;


に御注目下さい


int a = 1.12345;


が実行されると




         🌞まず🌞


数値データ1.12345



double型の形式でメモリに格納されることになります



次に


その


double型の形式でメモリに格納された数値データ1.12345が


int型の変数aに代入されることになります


このとき


double型の形式でメモリに格納された数値データ1.12345は


int型の変数aにそのまま代入することはできないので


数値の型変換により


1.12345の小数点以下の項が切り捨てられた


1



int型の変数aに代入されることになります


このとき


1.12345から1にデータ変換が行われることにより


1.12345の小数点以下の項のデータの情報量が失われています


そのことを


コンパイラは


警告 C4244 '初期化中': 'double' から 'int' への変換です。データが失われる可能性があります



教えてくれているんだよ


この警告文からも


int a = 1.12345;


が実行されたとき


まず


数値データ1.12345



double型の形式でメモリに格納されているのがうかがえるね!(^^)!」



ソーラー「さらに


次のプログラムをご覧ください

👇



#include <stdio.h>


int main(void) {


float a = 1;


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


return 0;


}


ビルド実行結果


1.000000


ソーラー「


今回は警告文は表示されないね


このプログラムでは


       まず


int型の形式で数値データ1がメモリに格納されることになります


その後


float型の変数aに


int型の形式でメモリに格納された数値データ1が格納されることになるのですが


float型の変数aに


int型の形式でメモリに格納された数値データ1が格納されることになるので


数値の型変換がおこり


1 が(実数値の1.0として) に変換され


float型の変数aに1.0



格納されることになります


この場合は


1 が1.0になっただけなので


数値データの情報量が失われることがないので


警告文が表示されることはないんだね


つまり


int型の形式でメモリに格納されたデータを


float型の変数に格納する場合は


数値の型変換がおこなわれても


データの情報量が失われることはなく


コンパイラによって警告文が表示されることはないというわけなんだ


数値の型変換がおこなわれるからといって


必ずしも警告文が表示されるとは限らないんだね


そして



printf関数に%f出力変換指定子をもちいて


数値データを表示する際は小数点以下6桁までが表示されるので


ビルド実行結果


1.000000


が表示されているんだね」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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