ちょっと変わったマニアな作品が集結

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q16進数から10進数への変換

16進数の77が16×14+7だということはわかるのですが、少し複雑になるとわからなくなります。
例えば以下のような場合です。

「16進数で5D2Cは
16の三乗×5+16の二乗×13+16×2+12
とあらわされます。」

なぜ、16の三乗や、16の二乗をする必要があるのでしょうか?

5桁になるとおそらく16の4乗をする必要がありそうですが、
宜しくお願いします。

Aベストアンサー

5桁で16の4乗、というのは正しいです。
この説明は下でされているので省きます。

16進数は数が大きいので、扱いが面倒、と思われるかもしれないので、
簡単な2進数への変換法を書いておきます。

16進数で5D2Cの場合
 1、各桁を2進数に変換する
 ⇒5D2C = 0101 | 1101 | 0010 | 1100
 2、変換したものをそのまま結合する
 ⇒ 0101 | 1101 | 0010 | 1100 ⇒  0101110100101100

 これで、2進数になります。
2のN乗の方が計算が楽だと思いますので、10進数にする場合は
使ってみてはいかがでしょうか?
(8進数の場合も同様にできます)

Q8進数から2進数に変換の

8進数223を2進数に変換したいのですが、
まず223を10進数に変換(2×8^2+2×8+3×1=147)→それから2進数に変換→答えは10010011
という方法しかないのでしょうか?
10進数に変換せず、直接2進数にする方法はあるのでしょうか?

Aベストアンサー

8進数の1桁を2進数の3桁に変更する。

(223)8の場合
2→010
2→010
3→011

よって、
(010010011)2

必要に応じ、上位の0を削除する

Q16進小数0.Cを10進数小数に変換したら0.75になりますがわたし自

16進小数0.Cを10進数小数に変換したら0.75になりますがわたし自身良く解りません
詳しくおしえていただけませんでしょうかm(._.)m

Aベストアンサー

10進数で「0.1」と書くと、
小数点より下位の「1」の意味は「10分の1の量が1コ」という意味ですよね。
10分の1の量が1個だと 0.1
10分の1の量が2個だと 0.2
と続けて
10分の1の量が9個だと 0.9
じゃあ
10分の1の量が10個だと?

小数点の右側の場所では表現できないので、左側の場所を使って
1.0
と書きます。
これが10進法です。


16進数で小数点を含む数字の意味を考えると...
16進数「0.C」は、小数点の右側の「C」は「16分の1の量がC個(=12コ)」という意味です。
16分の12は約分できるので、してみると4分の3、10進数の小数で言えば=0.75です。

そういう事です。

Q2進数から8進数に変換の

答えが分からず困っています。どなたか教えてください!
2進数0.1101は8進数ではいくつになるのでしょうか?
また、この計算をしてくれる計算機のサイトがあれば教えてください。

Aベストアンサー

2進数の0.1101 は、下記の様な意味になりますね。

(1 * 1/2) + (1 * 1/4) + (0 * 1/8) + (1 * 1/16)

これを下記の様な、8進数の形にすれば良い訳です。

(? * 1/8) + (? * 1/64) + (? * 1/512) ・・・

実際にやってみますと、

(1 * 1/2) + (1 * 1/4) + (0 * 1/8) + (1 * 1/16) = 13/16
13/16 = (6 * 1/8) + (4 * 1/64)

ということで、0.64 になります。

2進数を3桁ずつに分けると、それぞれが8進数の1桁に対応しますので、3桁ずつに分けて計算すると楽かと。

0.1101 → 000 | 110 | 100

000(2進) → 0(8進)
110(2進) → 4 + 2 + 0 → 6(8進)
100(2進) → 4 + 0 + 0 → 4(8進)

Q進数の小数点をどう変換するのか

現在進数の小数点で詰まってます

2進数⇒10進数へ変換するときは
11.01011⇒
1*2~1+1*2~0+0*2~-1+1*2~-2+0*2~-3+1*2~-4+1*2~5
2 +1 +0 +0.25 +0.125 +0.625 +0.3125
3+1.3125
4.3125

2進数⇒16進数へ変換するときは
11.01011⇒
B.0 |8+0+2+1|
B.0B

で良いと思ってます(間違ってたらすいません)

ここで本題なんですが、小数点を含んだ進数で
2進数⇒8進数
8進数⇒2進数
10進数⇒2進数
16進数⇒2進数
この[通り]の場合の小数点の出し方を何方かご存知ないですか?
無ければ無い、あればあるで教えて頂けないでしょうか
扱う数字はいくつでも勿論結構です、宜しく御願いします

Aベストアンサー

基本的に相互変換可能です。

> 2進数⇒10進数へ変換するときは
> 11.01011⇒
> 1*2~1+1*2~0+0*2~-1+1*2~-2+0*2~-3+1*2~-4+1*2~5
> 2 +1 +0 +0.25 +0.125 +0.625 +0.3125
> 3+1.3125
> 4.3125

計算結果が違います。
小数点以下の数字が1を超えることはあり得ません。
たぶん3.34375になるはずです。

> 2進数⇒16進数へ変換するときは
> 11.01011⇒
> B.0 |8+0+2+1|
> B.0B

2進数⇒16進数に変換するときは、小数点から4桁ずつに区切って考えます。
(2^4 = 16なので、2進数の4桁が16進数の1桁に対応する)
2進数の11.01011を16進数に直すには次のようにします。
(何もないところには0を埋めます)

| 0011. | 0101 | 1000 |

2進数の0011に相当する16進数は3
2進数の0101に相当する16進数は5
2進数の1000に相当する16進数は8

2進数の11.01011は、16進数の3.58
10進数に直してみると、
3 + 5/16 + 8/256 = 3.34375
となり、元の10進数とも一致します。

16進数⇒2進数は逆の操作で行えます。
16進数3.58を1桁ずつに区切って、その数字に対応する4桁の2進数を当てはめればよいです。

16進数の3に相当する2進数は0011
16進数の5に相当する2進数は0101
16進数の8に相当する2進数は1000

つまり16進数の3.58は、2進数の0011.01011000(11.01011)になります。

2進数⇔8進数の相互変換も同様に行えます。
2^3 = 8なので、2進数の3桁が8進数の1桁に対応します。
つまり2進数を8進数に直す時には3桁ずつ区切ればよいです。

> 10進数⇒2進数

10進数小数を2進数小数に直すには、今までの方法とは別の手段を使う必要があります。

例 10進数の0.14を2進数に直す
やり方は、0.14をどんどん2倍し、1の位を見ます。
1の位の数字が、小数点以下の位の数字になります。
(なお、3.14のような整数部分に0以外の数字をもつ数は、
整数部分(3)と小数部分(0.14)に分け、
それぞれ別々に2進数に変換し、最後にくっつけます。)

(1) 0.14を2倍 → .28
繰り上がりがないので、2^(-1)の位は0
(2) 0.28を2倍 → .56
繰り上がりがないので、2^(-2)の位は0
(3) 0.56を2倍 → 1.12
繰り上がりがあったので、2^(-3)の位は1
1の位の数字を除去
(4) 0.12を2倍 → .24
繰り上がりがないので、2^(-4)の位は0
(5) 0.24を2倍 → .48
繰り上がりがないので、2^(-5)の位は0
(6) 0.48を2倍 → .96
繰り上がりがないので、2^(-6)の位は0
(7) 0.96を2倍 → 1.92
繰り上がりがあったので、2^(-7)の位は1
1の位の数字を除去
(8) 0.92を2倍 → 1.84
繰り上がりがあったので、2^(-8)の位は1
1の位の数字を除去
(9) ……

といった感じです。
これは10進数の小数に10をかけて、
小数点を右隣に移すことと同じことをやっています。
2進数なら、2をかければ小数点が右隣に移るので今回は2倍です。

ではなぜ小数点を右隣に移すのか。
それは、少数点を1個ずつ右にずらしていけば、
1の位に小数点以下の部分の数字が順番に出てくるからです。
例えば3.14に10をかけると31.4です。
1の位を見ると、元の3.14の10^(-1)の位が現れます。
さらに31.4に10をかけると314です。
1の位を見ると、元の3.14の10^(-2)の位が現れます。
今回の10進数⇒2進数の変換に関しても、それと同じことをやっています。

基本的に相互変換可能です。

> 2進数⇒10進数へ変換するときは
> 11.01011⇒
> 1*2~1+1*2~0+0*2~-1+1*2~-2+0*2~-3+1*2~-4+1*2~5
> 2 +1 +0 +0.25 +0.125 +0.625 +0.3125
> 3+1.3125
> 4.3125

計算結果が違います。
小数点以下の数字が1を超えることはあり得ません。
たぶん3.34375になるはずです。

> 2進数⇒16進数へ変換するときは
> 11.01011⇒
> B.0 |8+0+2+1|
> B.0B

2進数⇒16進数に変換するときは、小数点から4桁ずつに区切って考えます。
(2^4 = 16なので、2進数の4桁が16進数の1桁に対...続きを読む

Q10進数から8進数へ

同じような質問が多々ありますが、どうしてもわからないので教えてください!!
10進数の12.3を8進数に変換するやり方がわかりません。12は14になるのがわかるのですが、0.3はどうすればいいのでしょう。。。

Aベストアンサー

12.3などといわず、123.4でやってみましょう。
123÷8=15...3↑(この整数部分をさらに8で割ります)
 15÷8= 1...7|(この整数部分をさらに8で割ります)
  1÷8= 0...1|(ここで計算は終わりです)
よって123の八進表示は―→の順に読んで173となります。

0.4の部分は÷ではなく、×で計算します。
0.4×8=3.2|(この小数部分にさらに8を乗じます)
0.2×8=1.6|(この小数部分にさらに8を乗じます)
0.6×8=4.8|(この小数部分にさらに8を乗じます)
0.8×8=6.4|(この小数部分にさらに8を乗じます)
0.4×8=3.2↓(ここからは繰り返しになります)
よって0.4の八進表示は―→の順に読んで0.3146314631463146…という循環小数になります。整数部と小数部の算出は全く逆の計算になっていることに気がついてください。

Q10進数をBCDに変換する方法

10進数から2進化10進数(BCD)に変換するところで疑問があります。
たとえば、10進数の3846をBCDに変換する場合答えはどのようになりますか?

私なりに考えたところまでを示しますが、答えがわかりません。
どこに考え方の間違いがあるのでしょうか?

まず、3846を2進数に変換しました。
3846 → 0000111100000110 (2進数)となります。

ここからBCDに変換する場合、4ビットずつを1つと考えて数字を表現するので、上記の2進数の頭から4つずつ分けて考えると

1つ目 0000
2つ目 1111
3つ目 0000
4つ目 0110
の4つにわけました。

続いて、それぞれを10進化しました。
1つ目 0000 → 0
2つ目 1111 → 15
3つ目 0000 → 0
4つ目 0110 → 6

ここで疑問が出てきます。
2つ目のところで、1111を10進化すると15となってしまい桁上りが生じます。
この場合どのように処理するのが良いのでしょうか?

どなたかご教授ください。

Aベストアンサー

BCDに変換する際、数値全体を2進数に変換する必要はありません。
各桁を構成している数値を2進数に変換して、合体させればよいです。
10進数の3846をBCDに変換するのであれば、
3 → 0011
8 → 1000
4 → 0100
6 → 0110
より、
0011 1000 0100 0110
です。

Q10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?

10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?
10進数の-7.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?
計算方法を教えてください。

Aベストアンサー

14.5を符号と指数と仮数に分けます。
符号は正の数なので符号は0
次に14.5を符号無し2進数に変換すると
1110.1
小数点を左に移動させて1だけ残すと
1110.1=1.1101*2^3
仮数は23ビットで小数点より右側だけなので、足りない分を0でうめて
11010000000000000000000
指数の3を127でバイアスするので
3+127=130
これを2進数に直すと
10000010
全て合わせると、
01000001011010000000000000000000
で、32ビットの2進数に変換できました。
同じように、-7.5を変換すると、
符号は負の数なので1
-7.5を符号無し2進数に変換すると、
 111.1
=1.111*2^2
なので、仮数は
11100000000000000000000
指数の2を127でバイアスすると
2+127=129
これを2進数に直すと
10000001
全て合わせると
11000000111100000000000000000000
になります。
64ビットの場合は、指数のバイアスを127から1023にし、仮数の23ビットを52ビットまで増やせばOKです。

14.5を符号と指数と仮数に分けます。
符号は正の数なので符号は0
次に14.5を符号無し2進数に変換すると
1110.1
小数点を左に移動させて1だけ残すと
1110.1=1.1101*2^3
仮数は23ビットで小数点より右側だけなので、足りない分を0でうめて
11010000000000000000000
指数の3を127でバイアスするので
3+127=130
これを2進数に直すと
10000010
全て合わせると、
01000001011010000000000000000000
で、32ビットの2進数に変換できました。
同じように、-7.5を変換すると、
符号は負の数なので1
-7.5を...続きを読む

Q2進数の割り算が分かりません・・・。

2進数の割り算が分かりません・・・。
授業でいきなり出てきて大変に戸惑っています。
10010➗11(2進数)
の解き方を教えてください。
よろしくお願いします・・・!

Aベストアンサー

2進数の場合の割り算は引く事が出来るか?をフラグを立てていく感じになります。

Q小数点が混じった2進数を8進数に変換するやり方

小数点が混じった2進数の11.11を8進数に変換するさい、2進数の11.11をいったん10進数に変換します。因みに10進数にすると3.75になります。そしてここで質問です。
この3.75を下一桁から求めるやり方で計算していくと、まず8進数にしたいのだから3.75/8なのですが
ここから先をどうしてよいのかが分からないのです。この式そのものの答えは、0.46875ですが、馬鹿正直に割り切るべきですが、それともどこかで計算を止めるべきですか。
因みに変換ツールで答えを出すと11.11は、03.60となりますが、0.46875は、見る影もありません。どうすれば、3.75/8から先述の答えである03.60にたどり着けますか。

Aベストアンサー

2進数から8進数にするだけなら#1の方の方法が一番良い。10進数に一度変換するのは手間がかかりすぎる。

それでもあえて10進数の3.75を8進数に変換する方法を説明します。
まず、整数部分と小数部分に分けます。3と0.75に分けます。
整数部分の3はそのままで良いでしょう。小数部分を8進数にするにはまず8倍します。
0.75*8=6
これで小数点以下の1桁目は"6"となります。また、この計算で小数部分が出てこなかったここで計算はおしまい。

たとえば10進数の"0.3"を8進数に変換するには
0.3*8=2.4 1桁目は"2" 次に2.4の小数部分を8倍して
0.4*8=3.2 2桁目は"3" 同様に
0.2*8=1.6 3桁目は"1"
0.6*8=4.8 4桁目は"4"
0.8*8=6.4 5桁目は"6" ここで1桁目の計算の際に出てきた0.4が残りますのでこれからは循環となります。

よって
0.3(10進)=0.2314631463146...(8進)
となります。


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

人気Q&Aランキング