天国にいけるC言語入門 シーズン1 パソコン超初心者がゼロから東方風シューティングをつくる編 ver.0.4.15.789 RELIEF
キャスト演算子をもちいて変数に格納されている数値を整数値から実数値、実数値から整数値に変換してみましょう。
キャスト演算子をもちいて変数に格納されている数値を整数値から実数値、実数値から整数値に変換してみましょう。
キャスト演算子をもちいて変数に格納されている数値を整数値から実数値、実数値から整数値に変換してみましょう。
清美 「みんな まってました ついにキャスト演算子の登場です。」
清美がついにカールトン問題の解決策をもって登場する。
聡子 「なに キャスト演算子って 新ネタ・・・?」
聖美「ごくっ・・・ついに ラスボスの登場の予感・・・」
清美「聡子ちゃんも 聖美ちゃんもよくみてて。
次のプログラムは
float型の変数 aに格納された実数値1.5に
整数値2をかけあわせるプログラムです。
#include <stdio.h>
int main(void)
{
float a;
a=1.5;
printf("%d\n",a*2);
return 0;
}
プログラムの実行結果(EAZY IDECの場合)
0
プログラムの実行結果(Visual Studioの場合)
プログラムをデバッグなしで実行すると
いったん
警告 C4477 'printf' : 書式文字列 '%d' には、型 'int' の引数が必要ですが、可変個引数 1 は型 'double' です Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 8
と表示されます,が
0が表示されます。
このプログラムでは
🍎実数の型float型の変数aに🍎格納されている実数値1.5
×(かける)
🍒整数値の型int型(の形式でメモリ)に🍒格納されている整数値2
が行われようとしています。
コンピュータは同じ型同士の数値計算しかできないため
整数値の型に格納されている整数値
と
実数値の型に格納されている実数値
が混ざった計算をするときは
整数値の型に格納されている整数値は実数値の型に格納されている実数値に格納し直されるという
仕組みにより
整数値の型に格納されている整数値2は実数値の型に格納し直され実数値2.000000(仮の表現です)となります
となると
🍎実数値の型float型の変数aに🍎格納されている実数値1.5
×(かける)
🍒整数値の型int型(の形式でメモリ)に🍒格納されている整数値2
は
実数値の型float型の変数aに格納されている実数値1.5×実数値の型に格納しなおされた実数値2.00000(仮の表現です)
に変換されて計算がおこなわれます
計算結果の
a*2も実数の型に格納された実数値となります。
その実数値であるa*2を
「整数値をprintf出力表示する%d出力変換指定子」をつかって
printf("%d\n",a*2);
のように
printf出力表示しようとしているので
このような正しくないプログラムの実行結果になります。
ですので
今のプログラムの
%d出力変換指定子
の部分を
%f出力変換指定子に変更して
コンパイルすると
#include <stdio.h>
int main(void)
{
float a;
a=1.5;
printf("%f\n",a*2);
return 0;
}
プログラムの実行結果
3.000000
と
正しいプログラムの実行結果が出てきます
ね 聡子ちゃん」
聖美 「どこかで おなじことをやったことがあるような・・・・・」
清美「ここで
キャスト演算子の登場です
まあ みててね
変数aにキャスト演算子をもちいます
キャスト演算子() とは変数に作用する演算子で
(int)a や (float)b
のように記述されます。
(int)aと記述されたなら
変数aがfloat型の変数で
変数aに格納されている数値が実数値だったとしても
変数aに格納されている実数値は
(int)によって整数値に変換されます。
(float)bと記述されたなら
変数bがint型の変数で変数bに格納されている数値が整数値だったとしても
変数bに格納されている整数値は
(float)によって実数値に変換されます。
ですので
今のプログラムで
実数値1.05を格納している実数値の型float型の変数aに
キャスト演算子(int)を用いると
float型の変数aに格納されている実数値1.5は
小数点以下の0.5が切り捨てられ
整数値1に変換され
(int)a=1
をあらわすことになります
ですので
(int)a*2=2
となり
(int)a*2を用いた
以下のプログラムの実行結果は
👇
#include <stdio.h>
int main(void)
{
float a;
a=1.5;
printf("%d\n",(int)a*2);
return 0;
}
プログラムの実行結果(EAZY IDECの場合)
プログラムの実行結果(Visual Studioの場合)
2
となります
次のプログラムでは
👇
#include <stdio.h>
int main(void)
{
int b;
b=1;
printf("%f\n",(float)b*2);
return 0;
}
プログラムの実行結果(EAZY IDECの場合)
プログラムの実行結果(Visual Studioの場合)
2.000000
👆
int型の変数bに
キャスト演算子(float)が用いられています
int型の変数bに
キャスト演算子(float)を用いた
(float)bは実数値1.000000(仮の表現です)となります。
int型の変数bに格納されている整数値1は
実数値の型の形式でメモリに格納しなおされます。
仮にわかりやすくいうと
整数値1は
実数値の1.000000(仮の表現です)に変換され
(float)bは実数値1.000000(仮の表現です)を表すことになります。
よって
(float)b*2は
実数値の型に格納されている実数値1.000000×整数値の型に格納されている整数値2
となります。
ここで
コンピュータは同じ型同士の数値計算しかできないため
整数値2は実数値の型の形式でメモリに格納し直され
( 実数値の型に格納されている実数値×整数値の型に格納されている整数値 の計算においては
整数値の型に格納されている整数値
は
実数値の型に格納されている実数値
に変換されるので
実数値の型に格納されている実数値×整数値の型に格納されている整数値 の計算は
実数値の型に格納されている実数値×実数値の型に格納されている実数値
の計算
に変換されます)
仮にわかりやすくいうと
整数値2は
実数値2.000000となり
今の
実数値の型に格納されている実数値1.000000×整数値の型に格納されている整数値2
は
実数値の型に格納されている実数値1.000000×実数値の型に格納されている実数値2.000000
となります
そうなると
(実数値の型に格納されている実数値×実数値の型に格納されている実数値
の計算結果も
実数値の型に格納されている実数値となるので)
実数値の型に格納されている実数値1.000000×実数値の型に格納されている実数値2.000000
の計算結果も実数値の型に格納されている実数値となります
ですので
実数値×整数値をあらわす
(float)b*2
の計算結果も
実数値の型に格納されている実数値となります
そのため
(float)b*2の計算結果
をコマンドプロンプト画面に表示する際
printf関数内では
printf("%f\n",(float)b*2);
のように
実数値をprintf出力表示する%f出力変換指定子がもちいられます。
ここまで いいかな?」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます