教えて!gooにおける不適切な投稿への対応について

たびたびお世話になっています。
タイトルの通りなんですが、8進数から16進数、16進数から8進数のやり方が分かりません・・・。
例題をまじえて教えて下さい。
小数の問題も教えて下さい。
お願いします。

gooドクター

A 回答 (2件)

#1さんの答で正解ですが、ちょっとコツがあります。



16進数は、2進数の4ケタがひとかたまりになっているものであり、
8進数は、2進数の3ケタがひとかたまりになっているものです。
16進数の3ケタ、もしくは8進数の4ケタをひとまとめにすれば、
どちらも2進数の12ケタとなります。

たとえば、8進数で
57314506
という数があったとすれば、
5731 4506
とまず4ケタに分解します。
それから、5→101のように個々の数を2進数に変換します。
101 111 011 001 100 101 000 110
これを2進数4ケタごとに組み替えて、
1011 1101 1001 1001 0100 0110
そして、1011→11(10進数)→B(16進数)のように変換します。
BD9 946
結局、16進数にするとBD9946となります。

基本的には同じですが、大きなケタのとき、
ぜんぶつながった2進数にするより間違えにくくていいと思います。

16進数→8進数の場合も同様です。(今度は16進数を3個ごとに区切る)

また、
4AD3F(16進数)
のように3個に区切れない場合、
頭に0や00をつけて桁数をふやします。
→04AD3F
→04A D3F
→0000 0100 1010 1101 0011 1111
→000 001 001 010 110 100 111 111
→0112 6477
→1126477(8進数)

少数も同様です。
たとえば0.7109375(10進数)という数を例にします。
これは91/128です。
2進数にすると0.1011011になります。
0を付加して3ケタごとに区切ると、0.101 101 100となり、
これを8進数に直すと0.554
1/8 * 5 + 1/8^2 * 5 + 1/8^3 * 4 = 0.7109375
なのでちゃんと8進少数になっています。

これを(0を付加して)4ケタにすると、
0.5540
→0.101 101 100 000
→0.1011 0110 0000
→0.B 6 0
→0.B6(16進)
1/16 * B(=11) + 1/16^2 * 6 = 0.7109375
となるので合っています。
    • good
    • 11

繰り返される質問だたお思われますが、一度2進数に変換してから変換します。


二進数を3桁区切りで8進数、4桁区切りで16進数です。

たとえば、便宜的に、4桁ごとにスペースを入れました。
1010 1001 1000 1110 1100 1010 1000 0110 0010 0001.0001 0010 0011....

16進数では、4桁区切り
a987654321.123...
と表記されます。

8進法では、3桁区切り
便宜的に3桁ごとに、スペースを入れました。
1 010 100 110 000 111 011 001 010 100 001 100 100 001.000 100 100 011....
12460731241441.0443...


0 <-> (0)000 0
1 <-> (0)001 1
2 <-> (0)010 2
3 <-> (0)011 3
4 <-> (0)100 4
5 <-> (0)101 5
6 <-> (0)110 6
7 <-> (0)111 7 ここまで、8進数の範囲
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進数

左から、10進数、2進数()を付けたのは、8進数の場合、8進16進の表記です。

補)2進数のところで、目が「ちかちか」して桁を間違えているかも知れません。なんせ、年なもんで~~;;;;

小数以下は、切の良い数字でないと桁が長くなってしまうので、"...."で表示しました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング