C言語における16進数の表し方や出力の仕方について解説していきます。

C言語において16進数は、バイナリデータメモリを扱うときなどに便利です。
ビット演算シフト演算でも16新数の概念が出てきますので、基本的な扱い方は覚えておきましょう!

C言語に関する解説をまとめています。
>C言語解説まとめ!

目次

そもそも16進数とは

16進数とはその名の通り16個の数字で数を表す方法です。

10進数と同じく0〜9の数字に加え、A~Fの6種類の文字を使って数を表します。

A~Fはそれぞれ10〜15の数字に対応しています。

4ビットごとに表現できるため、2進数の簡潔な表現ができるなどのメリットがあります。
要するに、より大きな数を少ない桁数で表現することが出来るのです。

10進数、2進数、16進数の対応表を作ってみました。

10進数2進数16進数
000
111
2102
3113
41004
51015
61106
71117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F
161 000010

表を見てわかる通り、16進数の桁が上がるタイミングで2進数の桁も上がっていることから、16進数と2進数はお互いに対応し合い、扱いやすい数値であることがわかります。

また、16進数が一番桁が少なく数を表現できていることも分かります。

16進数の表し方

C言語において16進数は「0x」を数字の初めにつけることで表します。

例えば「10000(10)」の16進数「2710(16)」をC言語で表現しようとすると、

「0x2710」

になります。

「0x」は「0X」でも問題ないです。

16進数の出力の仕方

変換指定の「%x」または「%X」を使います。

例えば先ほどの「0x2710」をprintfで出力しようとすると次のようになります。

printf(” %x\n ” , 0x2710 );

変数の場合も同様です。

10進数を16進数で出力したい場合には次のようになります。

printf(” %x\n ” , 10000 );

16進数を10進数で出力したい場合には次のようになります。

printf(” %d\n ” , 0x2710 );

桁数を指定したい場合などは基本的に10進数と同様ですので、次の記事をご覧ください。
>【C言語】桁数を指定して数値を出力する方法! 小数点以下の桁数まで指定!

左シフトするとどうなるのか

「<<」この記号を用いることでC言語では左シフトを行えます。

左シフトとは、数字を2進数で考えた時に、桁を一つ左に動かす作業です。
右シフトは反対に右に動かす作業になります。

こんなのを覚えて何に使うのかと疑問に思うかもしれませんが、
乗算や除算の計算を高速化できる等、計算を早くすることなどに用いられます。

16進数は1桁で4ビットの値を表せますから、4桁左シフトするごとに1桁左に動くことになります。

次のようなプログラムを実行してみましょう。

#include<stdio.h>
int main(void){

printf(“%08x\n” , 0x2710<<0 );
printf(“%08x\n” , 0x2710<<4 );
printf(“%08x\n” , 0x2710<<8 );
printf(“%08x\n” , 0x2710<<12 );
printf(“%08x\n” , 0x2710<<16 );

}

結果

4桁左シフトするごとに1桁左に動いているのが分かりますね!

16進数のシフト演算などは、様々なところで活用できますので、使えるようになりましょう。

最後に

最後まで読んでいただきありがとうございます!

C言語における16進数の解説をしようと思ったのですが、最後は少しズレてしまいました笑

シフト演算に関する詳しい解説も今後書きたいと思いますので、気になる人はチェックしてください。

C言語に関する解説をまとめています。
>C言語解説まとめ!