%x出力変換指定子は変数に格納された10進数整数値データを16進数数値データに変換してprintf出力表示する際に用いられます
%x出力変換指定子は変数に格納された10進数整数値データを16進数数値データに変換してprintf出力表示する際に用いられます
#include <stdio.h>
int a=15;
int main(void)
{
printf("%x",a);
return 0;
}
プログラムの実行結果は
f
%x出力変換指定子は変数に格納されている整数値データを
16進数でprintf出力表示する際に用いられます。
このプログラムでは
int型の変数aに10進数数値データ15を代入した後
printf("%x",a);
を実行することにより
10進数数値データ15
を
16進数fに切り替えてコマンドプロンプト画面に表示しています
ここでfは16進数で10進数の15に相当します
アレサ 「16進数では数値は0から順に
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,20・・・
と表現されます。
16進数では
10進数の1をあらわすのに1
10進数の2をあらわすのに2
10進数の3をあらわすのに3
10進数の4をあらわすのに4
10進数の5をあらわすのに5
10進数の6をあらわすのに6
10進数の7をあらわすのに7
10進数の8をあらわすのに8
10進数の9をあらわすのに9
10進数の10をあらわすのにa
10進数の11をあらわすのにb
10進数の12をあらわすのにc
10進数の13をあらわすのにd
10進数の14をあらわすのにe
10進数の15をあらわすのにf
10進数の16をあらわすのに10
10進数の17をあらわすのに11
10進数の18をあらわすのに12
10進数の19をあらわすのに13
10進数の20をあらわすのに14
10進数の21をあらわすのに15
10進数の22をあらわすのに16
10進数の23をあらわすのに17
10進数の24をあらわすのに18
10進数の25をあらわすのに19
10進数の26をあらわすのに1a
10進数の27をあらわすのに1b
10進数の28をあらわすのに1c
10進数の29をあらわすのに1d
10進数の30をあらわすのに1e
10進数の31をあらわすのに1f
10進数の32をあらわすのに20
が用いられます」
ソーラー 「16進数では数値は0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,fの
🍎16個🍎の数値(文字)をもちいてあらわされているわけだ。
となると、
50進数だと数値は🍅50個🍅の数値(文字)をもちいて
あらわされるわけかな?
そうなるとアルファベットがたりないや。
そのときは記号?や/\]:;[@^-0,.なんかも使うことになるのかな?」
アレサ 「0000111111・・・
そうですね。そうなると思います。
では
実際に
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,fの次の数値
10進数16は16進数でどうあらわされるでしょうか?
プログラムを組んで確かめます。
%x出力変換指定子をもちいて
10進数16を16進数であらわしてみます。
#include <stdio.h>
int a=16;
int main(void)
{
printf("%x\n",a);
return 0;
}
プログラムの実行結果
EAZY IDECの場合
Visual Studioの場合
10
10進数16は16進数では10と表現されています。
16進数f(10進数では15)の次の16進数が10(10進数では16)となるわけですね
」
ソーラー「10進数と16進数の関係は
10進数であらわすと 16進数10=16となります
10進数であらわすと 16進数100=16の2乗=256となります
10進数であらわすと 16進数1000=16の3乗=4096となります
10進数であらわすと 16進数10000=16の4乗=65536となります
10進数であらわすと 16進数100000=16の5乗=1048576となります
・・・・・
・・・・・
・・・・・
・・・・・
・・・・・
こんな感じ\(^o^)/・・・
つまり
16進数100000・・・(0の数がn個のとき)=10進数 16のn乗
の関係
となっています。
ねえ、ねえ じゃ
今のプログラムで🍋10進数(-15)🍋を%x出力してみたら
どんな16進数がでてくるんだろうか?」
アレサ 「10進数(-15)を16進数で表示ですか?
マイナス符号がついた10進数(-15)
は
16進数の場合では どう表現されるのでしょうか?
考えてもわかりませんが
10進数(-15)を%x出力変換指定子をもちいて16進数として表示する
プログラムを構成して答えをもとめてみますね。
👇
#include <stdio.h>
int a=-15;
int main(void)
{
printf("%x",a);
return 0;
}
アレサ 「コンパイル........」
つつ~~~~~
プログラムの実行結果
fffffff1
ソーラー 「プログラムを実行できてる!」
アレサ 「プログラムの実行結果は fffffff1」
ソーラー 「以下、ソーラーのちょっとあやしい解説(笑)
プログラムの実行結果
fffffff1
???
10進数
-15
を16進数に直して表示する%x出力変換指定子を用いて
printf出力表示した結果が
fffffff1となっているのか・・・
う~ん
はたして%x出力変換指定子を用いて
-15を16進数に変換できるのかどうかは分からないけど
このプログラムの実行結果が正しいとすれば
どうやら16進数 fffffff1は10進数で表すと-15っぽい・・・
じゃあ
紙の上で実験してみようかな?
もろにf(10新数で15)+ fffffff1を計算してみると0になったりするのかな?
f+ fffffff1=f+( fffffff0+1)=ffffffff+1=100000000
(16進数ffffffffに1を足したものは100000000となります
ffffffff+1=100000000
の部分がわかりにくいですね。
まず
ffffffffはfffffff0+fとなります
ということは
ffffffffに1をたす
ffffffff+1=100000000
は
fffffff0+f+1=100000000
とあらわされるというわけですね
そして
fに1が加えられると10となります
fffffff0+10=100000000
さらに変形をおこなうと
ffffff00+f0+10=100000000
となります
次に
f0に10が加えられると100となります
ffffff00+100=100000000
となりますね
さらに変形すると
fffff000+f00+100=100000000
となります
f00に100が加えられると1000となります
fffff000+1000=100000000
さらに変形すると
ffff0000+f000+1000=100000000
となります
ここで
f000に1000が加えられると10000となり
ffff0000+10000=100000000
となります
さらに変形すると
fff00000+f0000+10000=100000000
となります
f0000に10000が加えられると100000となるので
fff00000+f0000+10000=100000000
は
fff00000+100000=100000000
となります
さらに変形すると
ff000000+f00000+100000=100000000
となります
次に
f00000に100000が加えられると1000000となるので
ff000000+f00000+100000=100000000
は
ff000000+1000000=100000000
となり
さらに変形すると
f0000000+f000000+1000000=100000000
となります
次に
f000000に1000000が加えられると10000000となるので
f0000000+f000000+1000000=100000000
は
f0000000+10000000=100000000
次に
f0000000に10000000が加えられると100000000となるのですね😊
)
(ここでソーラーは数値をいれかえて遊んでいます。)
となってなってなって>>>
f+ fffffff1=
f(10進数で15)+ fffffff1=100000000となる。
[もしも8桁までしかメモリに数値を格納できないシステム]なら
自分で言うのもなんですが
[カッコ]内の部分が説明としてあやしいのです。byソーラー
100000000=00000000と
100000000の
9桁目の1が消えて
f(10進数で15)+ fffffff1=00000000となり
16進数00000000は10進数でも0なので
f+ fffffff1=0
f(10進数で15)+ fffffff1=0
15+ fffffff1=0
fffffff1=-15かな、かな?
fffffff1は-15かな😊、かな😊?
」
アレサ「0000000000000000・・・う^^~ん」
ソーラー 「ぼくがぼけたらつっ込むんだよ~
アレサ。」
アレサ 「は、はい ソーラーさん
0000011111・・・
fffffff1が-15になるかどうかに関しては16進数のまま、
お話をすすめるのではなく
16進数fffffff1を2進数に変換してから
お話をすすめたほうがよいとおもいますの
そうすることによってあやしい[ ]の部分の
解説も正確に行えるとおもいます。
では 再びソーラーさんの解説はじまりますよ。」
は~い、アクション!
ソーラー 「あへふひは~~~~~~」
は~い、カット!
アレサ 「ソーーラーさん・・・」
ソーラー 「読者の視線が僕に釘付けなんだ。
この人生の晴れ舞台において
僕は・・・
僕は・・・
はあ、はあ
あああああ
ぼけないわけにはいかないんだ!」
アレサ 「は、はあ・・・・」
ではでは 再びソーラーさんの解説がはじまりますよ。
は~い、
プログラムの実行結果
fffffff1
の続きからアクション!
ソーラー 「プログラムが実行できてる!」
アレサ 「プログラムの実行は fffffff1」
ソーラー 「以下ソーラーのちょっといい解説(笑)
どうやら16進数 fffffff1は10進数で表すと-15っぽい・・・
もろに16進数 f+ fffffff1を計算してみるとしようね。
16進数 fは10進数15だから
f+ fffffff1=(10進数)0
みたいなことになったら
fffffff1は-15になるよね
それでは
f+ fffffff1が(10進数)0
になるか
試してみましょう
16進数f+ fffffff1=f+( fffffff0+1)=ffffffff+1=
(ここでソーラーは数値をいれかえて遊んでいます。)
ffffffff+1=
(16進数)f0000000+f000000+f00000+f0000+f000+f00+f0+f+1=
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ここでffffffff=f0000000+f000000+f00000+f0000+f000+f00+f0+fとなっています。
この変形どうですか? わかりにくい??
ソーラー かなり遊んでいます。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
さらに変形すると
(16進数)
f×10000000+f×1000000+f×100000+f×10000+f×1000+f×100+f ×10+f+1
となります
ここで
16進数fは10進数15
であるということと
(16進数)100000・・・(0の数がn個のとき)=(10進数)16のn乗
の
関係を用いると
(16進数)
f×10000000+f×1000000+f×100000+f×10000+f×1000+f×100+f ×10+f+1
💖イコール=💖
(10進数)15×16の7乗+15×16の6乗+15×16の5乗
+15×16の4乗+15×16の3乗+15×16の2乗
+15×16+15+1=
(10進数)15×(2の28乗)+15×(2の24乗)+15×(2の20乗)
+15×(2の16乗)+15×(2の12乗)+15×(2の8乗)
+15×(2の4乗)+15+1=
💖イコール=💖
(10進数)15を(2進数)1111に
(2の28乗)を(2進数)10000000000000000000000000000
(2の24乗)を(2進数)1000000000000000000000000
(2の20乗)を(2進数)100000000000000000000
(2の16乗)を(2進数)10000000000000000
(2の12乗)を(2進数)1000000000000
(2の8乗)を(2進数) 100000000
(2の4乗)を(2進数) 1000
に
変換すると
(2進数)1111×10000000000000000000000000000
+1111×1000000000000000000000000
+1111×100000000000000000000
+1111×10000000000000000
+1111×1000000000000
+1111×100000000
+11110000
+1111
+1
=(2進数)11110000000000000000000000000000
+1111000000000000000000000000
+111100000000000000000000
+11110000000000000000
+1111000000000000
+111100000000
+11110000
+1111
+1
=(2進数)11111111111111111111111111111111
+1
=(2進数)100000000000000000000000000000000
となって>>>
結局
f+ fffffff1=
f(10進数で15)+ fffffff1=
(2進数)1000000000000000000000000000000000000(33桁)となる。
int型は32桁(ビット)までしか数値を格納できないシステムなので
100000000000000000000000000000000(33桁)目の
1は格納できず
100000000000000000000000000000000(33桁)=00000000000000000000000000000000(32桁)となります
ですので
f(10進数で15)+ fffffff1=2進数00000000000000000000000000000000(32桁)となり
2進数00000000000000000000000000000000は10進数でも0なので
f(10進数で15)+ fffffff1=10進数0
15+ fffffff1=0
fffffff1=(10進数)-15かな、かな?
つまり
16進数fffffff1
は
10進数-15
で表されるんだ(^_-)-☆
」
アレサ「うわっすごい。ソーラーさん、すごい」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます