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進数 |
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
16 | 1 0000 | 10 |
表を見てわかる通り、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言語解説まとめ!