重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

2進数の0000 1101 1101 1100を8進数にする際、8進数は3bit単位で処理されているので、
0を二つ付け足して
000 000 110 111 011 100
とします。
ここからどう計算すると006734(8進数「)となるのでしょうか。
もちろん000が上一桁目の0、次の000が0、110が6、111が7、011が3、100が4ですが、
これはどのように計算してはじき出したものですか。
2進数→10進数→8進数ではじきだしたものですか、それとも何かこの数字が来たときはこの値、のような対応表のようなものがあり暗記するのでしょうか。

質問者からの補足コメント

  • 皆様、ご回答どうもありがとうございます。

    ここで追加の質問をさせてください。
    ①逆に16進数から2進数に、8進数から2進数にというときも暗記で行けますか?

    ②また、これ以外(2⇔8、2⇔16)にもこのような変換がし易くなるやり方はあるのでしょうか。

      補足日時:2018/02/09 11:31

A 回答 (5件)

「補足」の方への回答です。



>①逆に16進数から2進数に、8進数から2進数にというときも暗記で行けますか?

暗記するまでもなく、ちゃんと
 8進数=2進数の3桁
 16進数=2進数の4桁
の計算ができれば簡単でしょう。ただし、16進数を
 0~9、A(=1010), B(=1011), C=(1100), D(=1101), E(=1110), F(=1111)
と表記することを知っていないといけませんが。これは、暗記ではなく、たとえば「D」(10進数で「13」)なら
  13 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0
    = 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1
と計算できればよいだけです。

>②また、これ以外(2⇔8、2⇔16)にもこのような変換がし易くなるやり方はあるのでしょうか。

上のように、「n 進数の abcdefg」という数値は、10進数の
  abcdefg [n] = a * n^6 + b * n^5 + c * n^4 + d * n^3 + e * n^2 + f * n^1 + g * n^0 [10]
と表記できることさえ知っていれば、何進数であっても自在に変換できます。

「2進数」「8進数」「16進数」の場合には、たまたま
  n = 16 = 2^4
  n = 8 = 2^3
  n = 2
のような関係なので、10進数を経由しなくとも、簡単に直接変換できるわけです。

たとえば
  abcdefg [2] = a * 2^6 + b * 2^5 + c * 2^4 + d * 2^3 + e * 2^2 + f * 2^1 + g * 2^0 [10]
        = [a] * 2^6 + [b * 2^2 + c * 2^1 + d * 2^0] * 2^3 +[e * 2^2 + f * 2^1 + g * 2^0] * 2^0 [10]
        = [a] * 8^2 + [bcd] * 8^1 +[efg] * 8^0 [10]
        = [a][bcd][efg] [8]
ですから、数字列の [a], [bcd], [efg] を各々「2進数3桁」の「8進数表記」で書けばそのまま8進数になります。
    • good
    • 1

Windows の場合、特定ドライブを隠したい時にレジストリを編集します。


A:→1, B:→2, C:→4, D:→8 ...
のようにビットを立てた値を16進数で
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDrives (REG_BINARY)
に書き込みます。例えば、O: ドライブを隠したければ、
00 40 00 00
とします。

2進数と16進数の相互変換は私にとって日常的な計算です。10進数←→16進数は間に2進数を介在させることでなんとか暗算できてます。

8進数は、Linux のパーミションとか od コマンド以外ではあまり利用しないので暗算で変換したことはありません。

他に、7bit ASCII コードは暗記してますね。
    • good
    • 1

3桁の2進数を0〜7の8進数、4桁の2進数を0〜Fの16進数に、或いはその逆の変換は慣れれば暗算でできます。

    • good
    • 1

8進法が3ビットをわかるのが凄いですね!


2進法を10進法に直すのに、例えば、
111 【2】は、1・2^2 +1・2^1 +1・2^0=4+2+1=7 ですが、
8法でも、7までなら問題ないのですが、
1000 【8】は、8はないので、10ですね!
ですから、この場合、3ビット計算ですので、1000は考えられないので、
3ビットに、区切って、2→10進法に直す計算をすればいいと思います。
    • good
    • 1

2進法から直接8進法にしていると思います。

100(2進法)を例にとります。
これは 1x2^2 + 0x2^1 +0x2^0 =4を意味します。
それぞれの3桁を同様に計算・換算すると答を得ます。
    • good
    • 1

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