C言語での8進数、16進数の数値の表し方を学んでみよう🌞🌞🌞

マックス「C言語では8進数、16進数というものも使えるそうじゃないか


ただ8進数、16進数が何を意味しているのかわからんな・・・」


ソーラー「それでは10進数と8進数の対応表を見てください

10進数🐈🐈🐈8進数

1👉👉👉👉👉1

2👉👉👉👉👉2

3👉👉👉👉👉3

4👉👉👉👉👉4

5👉👉👉👉👉5

6👉👉👉👉👉6

7👉👉👉👉👉7

8👉👉👉👉👉10

9👉👉👉👉👉11

10👉👉👉👉👉12

11👉👉👉👉👉13

12👉👉👉👉👉14

13👉👉👉👉👉15

14👉👉👉👉👉16

15👉👉👉👉👉17

16👉👉👉👉👉20

17👉👉👉👉👉21

18👉👉👉👉👉22


ソーラー「このように8進数は


0から7までの8つの数字をつかって数値をあらわす仕組みとなっています。


8進数7の次は


8進数では8ではなく


8進数10


となっているのがわかります


8進数17の次は


8進数では18ではなく


8進数20


となっていますね。


マックス「8進数17の次は


8進数では18ではなく


8進数20なのか・・・


みかけない数値の表現方法だな・・・」


ソーラー「次は10進数と16進数の対応表を見てください


10進数🐈🐈🐈16進数

1👉👉👉👉👉1

2👉👉👉👉👉2

3👉👉👉👉👉3

4👉👉👉👉👉4

5👉👉👉👉👉5

6👉👉👉👉👉6

7👉👉👉👉👉7

8👉👉👉👉👉8

9👉👉👉👉👉9

10👉👉👉👉👉A

11👉👉👉👉👉B

12👉👉👉👉👉C

13👉👉👉👉👉D

14👉👉👉👉👉E

15👉👉👉👉👉F

16👉👉👉👉👉10

17👉👉👉👉👉11

18👉👉👉👉👉12

19👉👉👉👉👉13

20👉👉👉👉👉14

21👉👉👉👉👉15

22👉👉👉👉👉16

23👉👉👉👉👉17

24👉👉👉👉👉18

25👉👉👉👉👉19

26👉👉👉👉👉1A

27👉👉👉👉👉1B

28👉👉👉👉👉1C

29👉👉👉👉👉1D

30👉👉👉👉👉1E

31👉👉👉👉👉1F

32👉👉👉👉👉20

33👉👉👉👉👉21



マックス「なんか数値にアルファベットが混ざっていないか?


なんでぇ?」



ソーラー「それは😊ですね。


16進数は


0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F


16個の数字を用いて数値を表現するというルールがあるからなんです


10進数では


0

1

2

3

4

5

6

7

8

9


の10個の数字を用いて数値を表現していますね。


そして

数値をあらわすのに

0

1

2

3

4

5

6

7

8

9


までの数字しか使えないので


数値を

0

1

2

3

4

5

6

7

8

9

で表した後は


数値を


1と0を組み合わせた


10で表すことになっています


同様に


16進数では


0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

の16個の数字を用いて数値を表現しています。


そして

数値をあらわすのに

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

までの数字しか使えないので


数値を

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

で表した後は


数値を


1と0を組み合わせた


10で表すことになっています」


マックス「10進数16は16進数では10ってことか


なるほどね~」


ソーラー「さてさてC言語ではプログラム内で


8進数

16進数

を用いることもできます


その際


8進数


1

2

3

4

5

6

7

10

11

12

13

14

15

16

17

20



01

02

03

04

05

06

07

010

011

012

013

014

015

016


と左端に0をつけてあらわされます。


16進数


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は


C言語では


左端に0xをつけた


0x0

0x1

0x2

0x3

0x4

0x5

0x6

0x7

0x8

0x9

0xA

0xB

0xC

0xD

0xE

0xF

0x10

0x11

0x12

0x13

0x14

0x15

0x16

0x17

0x18

0x19

0x1A

0x1B

0x1C

0x1D

0x1E

0x1F

0x20


であらわされます」


マックス「16進数は


左端に0xをつけるのか


コンピュータぽくってかっこいいじゃないか」


ソーラー「そうですね。


それでは


8進数

16進数

を用いた


プログラムを構成してみましょう」



#include<stdio.h>


int main(void)

{

printf("%d\n", 00);

printf("%d\n", 01);

printf("%d\n", 05);

printf("%d\n", 010);

printf("%d\n", 0x0);

printf("%d\n", 0x1);

printf("%d\n", 0xA);

printf("%d\n", 0x10);

printf("%d\n", 0x20);


return 0;

}


(EAZY IDECの場合)



ソーラー「みなさん


このプログラムでは


数値を10進数に変換する%d出力変換指定子が


使われていることにご注目下さい。


ですので


8進数

00

01

05

010


16進数

0x0

0x1

0xA

0x10

0x20



10進数に変換されて


コマンドプロンプト画面に表示されることになります


マックス「おお そんな仕組みになっているのか」


ソーラー「それでは どんな結果が出てくるか


楽しみですね


コンパイル!」



コンパイル結果

0

1

5

8

0

1

10

16

32


(Visual studioの場合)

ビルド結果

0

1

5

8

0

1

10

16

32


ソーラー「でてきました


ちゃんと


8進数

16進数を


10進数に変換して


コマンドプロンプト画面にprintf出力表示することができました」


マックス「


C言語では


8進数

16進数も


プログラムでつかえるのか


設定がこってるな」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます