天国にいけるC言語入門 ヘキサ構造体 ver5.2130
int型、char型の変数に格納されているにかかわらずアスキーコードを%c出力変換指定子を使ってprintf 出力表示するとアスキーコードに対応する半角英数字がコマンドプロンプト画面に表示されます
int型、char型の変数に格納されているにかかわらずアスキーコードを%c出力変換指定子を使ってprintf 出力表示するとアスキーコードに対応する半角英数字がコマンドプロンプト画面に表示されます
アレサ 「ふん ふふ~ん😊010101101010101001010101・・・
あちらの世界(シーズン1)ではchar型の変数について
どう記述されているかな?
なになに・・・
char型の変数に格納できる1文字とは
アルファベットや数字や記号などの
「半角文字」
である・・・ですか・・・
アレサ 「010000101010010101・・・
アルファベットや数字だけでなく
「記号」などの半角文字・・・
記号もchar型の変数に格納できるのですか・・・
うふふ
では
記号をchar型の変数aに格納して
printf出力表示できるかためしてみようかな?」
#include<stdio.h>
int main(void)
{
char a='{';
printf("%c",a);
return 0;
}
プログラムの実行結果
{
アレサ「
記号{ も 本当にchar型の変数に格納、printf出力表示できています。
ここでも
半角記号{を char型の変数に格納する際は
コンパイラに文字と認識させるのに
char a='{';と
シングルクォーテーション' 'でくくるのは
半角英数字
a
や
b
を
'a'
'b'
と記述するのと同じです。
{の画像データに割り振られた番号、アスキーコードは123でした。
アスキーコード123を
🍊%c出力変換指定子を用いて🍊
printf出力表示すると
アスキーコード123に対応する画像データである{
がコマンドプロンプト画面に表示されます。
そのプログラムはこちらです」
👇
#include<stdio.h>
int main(void)
{
char a=123;
printf("%c",a);
return 0;
}
プログラムの実行結果
{
アレサ
「ここでプログラムを変更して
123をchar型の変数aでなく
123をint型の変数aに格納してみます。
char a=123;
の命令文を
int a=123;
に変更してみます
#include<stdio.h>
int main(void)
{
int a=123;
printf("%c",a);
return 0;
}
プログラムの実行結果
{
アレサ「このように
char a=123;
と数値データ123がchar型の変数に格納されていても
int a=123;
と数値データ123がint型の変数に格納されていても
数値データ123を%c出力変換指定子を用いてprintf出力表示すると
同じ{ が出力されますね。
数値データが
char型に格納されている
int型に格納されているにかかわらず
🍓%c出力変換指定子を用いて数値をprintf出力表示した場合🍓
🍓 その数値データに対応する半角文字の画像データが🍓
🍓コマンドプロンプト画面に出力されるのですの🍓
なぜなら
数値データが
char型(1バイト)の形式でメモリに格納されている
int型(4バイト)の形式でメモリに格納されているにかかわらず
🍓%c出力変換指定子を用いて数値をprintf出力表示する場合🍓
データ処理の関係上
その数値データは新たにint型(4バイト)の形式でメモリに格納されることになるからです
char型(1バイト)の変数aに数値データ1が格納されるときは
1バイトのメモリに
00000001
と格納されますが
printf("%c",a);
が実行されるときは
別の4バイトのメモリに
00000000000000000000000000000001
に格納し直されます
次に
char型の変数aの数値データ格納範囲は-127から128までですが
その範囲をこえる
12777777773
を
char=a;
a=12777777773;
と記述し
char型の変数a
に格納してみます。
そして変数aを
%c出力変換指定子をもちいてprintf出力表示してみます。
#include<stdio.h>
int main(void)
{
char a=12777777773;
printf("%c",a);
return 0;
}
プログラムの実行結果
m
変数の型charの数値データ格納範囲-127から128を超えて
12777777773を変数の型charに
char a=12777777773;
とうちこんでいるのに
エラー overflow(メモリにデータが格納しきれず他のメモリにデータが溢れています)と表示されず
プログラムが実行できています。
そして
半角文字1文字mがコマンドプロンプト画面に表示されています
これは
1277777777は
2進数で表示すると
001011111001100111010110101001101101
なのですが
右から8ビット分の
01101101までしか
char型のメモリに格納できなかったためにおこる現象です。
01101101
は
数値データ109を表しており
char a=12777777773;
printf("%c",a);
は
char a=109;
printf("%c",a);
を実行することに等しくなります
実際に
char a=12777777773;
printf("%c",a);
でなく
char a=109;
printf("%c",a);
を実行してみると
プログラムの実行結果
mが表示されます」
ソーラー「そうだったのか
なんでmが表示されるのか
やっとわかったよ~」
おまけ
日本語(漢字やひらがなやカタカナ)のような全角文字は
2バイト文字と呼ばれます。
2バイト文字とは
2バイト(16ビット)分のデータ量
例えば
0もしくは1が16個用いられた
1100110011111111
をもちます
2バイト文字の画像データには
それぞれに
このような
1100110011111111
のようなデータが割り振られており
この
1100110011111111
を用いて
2バイト文字の画像データを呼び出し利用することができます
ですので
1バイト=8ビットまでしか格納できない
char 型に
2バイト文字を
格納することはできません。
ためしに以下のプログラムのように
char 型の変数aに2バイトのデータ量をもつ2バイト文字である
て
を
「'て'」のように記述して
char a='て';
と代入し
"%c出力変換指定子をもちいて
printf出力表示しようとしても
#include<stdio.h>
int main(void)
{
char a='て';
printf("%c\n",a);
return 0;
}
プログラミングの実行結果(EAZY IDECの場合)
ファイル「C:/Users/solarplexus/AppData/Local/EasyIDEC/project/11111/main.c」の
「5行目」で記述エラーを発見しました。
警告
multi-character character constant
と
エラーが表示されます
multi-character character constantは
英語で
複数の文字でつくられた定数という意味です。
1つの文字は最低でも1バイトのデータ量を持つので
複数の文字でつくられた定数は
2バイト以上のデータ量をもっています。
シングルクオーテーション' '内には
半角英数字、1文字(1バイト文字)しか格納できないところを
(半角英数字記号は1バイト文字と呼ばれています。)
2バイトのデータ量をもつ複数文字にあたる
て
を
'て'のように格納しようとしたので
(て は 2バイト文字とよばれています)
エラーが表示されたのです
それに対し
統合開発環境Visual studioの場合
プログラムの実行結果
ㇳ
となります
Visual studioでは
'て'
を文字データとして認識しているようですね
ひらがな て
は2バイト文字なので
コンピュータのメモリの中で
例えば
1010101111110101
のように
2バイトのデータであらわされています
1010101111110101
は
ての画像データにつけられている番号なのです
char型は1バイトのデータ量しか
格納できないので
char型に
2バイトのデータ量1010101111110101を持つ
2バイト文字である
'て'
を格納しようとすると
統合開発環境Visual Studioの場合
1010101111110101
の右から1バイト分の11110101だけが
変数の型charに格納されます
そうして
メモリ内に格納された11110101を%c出力変換指定子を用いて
printf出力表示すると
11110101に対応する画像データ
ㇳ
がコマンドプロンプト画面に表示されるというわけです
統合開発環境EAZY IDECと
統合開発環境Visual Studioで
違いがでてきましたね。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます