• ベストアンサー

コンピューターで扱う、2進数について

コンピューターは0と1しか理解できず、 つまりそれは2進数で、それを4桁に区切って16進に変換して表現することが多いと思います。 今ふと思ったのですが、 何故16進なのでしょうか? 例えば3桁区切りで8進、5桁区切りで32進、 ではいけなかったのでしょうか? 例えばIPアドレスなんかも16進2桁ですよね? 2進の4桁+4桁ですよね。 単純にそう言う風に決めてしまったということなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

マイクロコンピュータのバス幅が最初は4ビットから 始まったので、そのビット数から16進数になったと思いますが・・・・。(4004) じゃあ、なぜ4ビットだったのかというと、#2の方が指摘されるように「10以上をカウントできる最小のビット数だから」だと思います。

azicyan
質問者

お礼

バス幅4ビットと言うのを決めたのは、 「10以上をカウントできる最小のビット数だから」 ということですよね? 自分の考えていた答えが、当たらずも遠からずで、良かったです! 回答ありがとうございました!

その他の回答 (4)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.5

昔は8進数の計算機もありましたが16進数にかわってしまいました。 10に近くて一番小さい16進数が採用されたのでしょう。 2^(2^2)が16と言うのも関係あるかもしれません。

azicyan
質問者

お礼

解答ありがとうございました!

  • elmclose
  • ベストアンサー率31% (353/1104)
回答No.3

今は、16進数があたりまえになってしまいましたが、以前は結構8進数も使われていました。8進数ですと、A~Fの文字を使わずに数字だけで表現できますから。 今のコンピュータは1バイトが8ビットで、4ビット+4ビットで書き表し易いから16進数が多用されるというのはあると思います。(No.1さんが書いている通り)。 32進数ですと、数字10字の他に何か文字を22種類も使わなくてはならず、人間が覚えにくいというのと、やはり5桁区切りにしても中途半端という理由もあると思います。

azicyan
質問者

補足

32だと文字が多すぎるな、ということも思いました。 1バイトと言うのは、 8ビット区切りで扱いやすいから単位として後から作られたものですよね? じゃあなんで4ビット区切りなんだろう、という疑問が湧いてしまいましたのです。 人から聞かれたらなんて答えればいいのかなって・・・。 32だと多すぎ、8だと少ないから、 と言う理由でよろしいでしょうか?

  • JUN-2
  • ベストアンサー率26% (360/1349)
回答No.2

10進数の0~9を表すには、最低4ビット必要なためだと思います。 TTL ICだけで組んだデジタル時計や電卓の表示回路を考えてみて下さい。 昔は、8進数も使われたようですが。(オクテットというのがその名残?ですね)

azicyan
質問者

お礼

>10進数の0~9を表すには、最低4ビット必要なためだと思います。 なるほどです! 私の考えとしては、通常使う10進に近い数字を選んだ? と思いました。 8進だと生活で通常使う10進より少ないから使わないのかな?と思いました。 オクテットですね。化学構造でありますよね。 化学構造…と言うと、やはり何か、理由があるのかなあ・・・ 回答ありがとうございました

回答No.1

単純に8ビットの単位を区切るのに4桁ずつ区切る方が都合がよいからなのでは。

azicyan
質問者

補足

すみません。 そもそも、8ビット区切りなのは何故なのでしょうか?

関連するQ&A

  • 2進数&10進数&16進数の変換

     ◆ コンピュータで使用される2進数  人が日常使用している数値は10進数ですが、コンピュータは内部で数値を表現する場合、2進数を使用  しています。しかし、「0」と「1」だけの2進数では人が分かりにくいため、人間が見えるところでは  コンピュータは2進数を10進数や16進数が変換して表現しています。ここではその変換方法を学びます。  ◆ 2進数  2進数とは、「0」と「1」の2種類の数字を用いて全ての数を表現します。10進数では0から数えて「9」の  次は位があがることになりますが、2進数では「 1 」の次に位があります。位があがれば、その新しい桁は   「 1 」 となり、それ以下の桁は全て 「 0 」 となります。それでは、2進数の数の増え方を見てみましょう。      ところで、2進数を表現する時は一般的に8桁単位で表現するため、8桁未満の場合は頭に0をつけます。  つまり、上の2進数の値は順番に 00000000 → 00000001 → 00000010 → 00000011 → 00000100 →  00000101 → 00000110 → 00000111 → 00001000 と表します。以下は2進数と10進数の対応表です。 2進数と10進数の対応表 10進数 0 1 2 3 4 5 6 7 8 9 10 ・・・ 2進数 0 1 10 11 100 101 110 111 1000 1001 1010 ・・・  ◆ 2進数から10進数への変換方法  10進数と2進数の対応表は以下の通りです。2進数の桁が上がる時の10進数の値が以下となります。 2進数と10進数の対応表2 10進数 1 2 4 8 16 32 64 128 2進数 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000  従って、2進数で「1」となっている桁に対応する上記の10進数の基準値を合計することにより、2進数から  10進数の値を求めることができます。例えば、2進数の「 00101010 」を10進数に変換する場合、基準値が  32、8、2の所でビットが1なので下図の通り、2進数の「 00101010 」は10進数では「42」だと分かります。            ◆ 10進数から2進数への変換方法  10進数の数値を「 0 」になるまで「 2 」で割り算していき、その結果の「余りの数 」を並べることで  ある10進数の値を2進数の値へ変換することができます。それでは、具体的に変換して見て行きましょう。           例えば、10進数の「160」を2で割り算していくと上図の結果となります。後は、余りの数を下から順番に  並べれば 「 10100000 」 の値が算出されます。次に、「22」を2で割り算していき余りの数を下から順に  並べれば 「 10110 」 の値が算出されます。ネットワークにおいては、2進数を一般的に8桁で表示する  ことから、8桁になるよう上位に「 0 」を追加して「 00010110 」とします。当然「 10110 」と同じ値。 因みにここ参照ですがhttp://www.infraexpert.com/study/ip1.html なぜこれが10進数なんでょうか? 10進数というのは、0から9までの数字が1増えて10になるんですよね? なのに2進数と10進数の対応表2を見ると 倍数になっているのですが、、 これはいったいどういう違いなんでしょうか? 回答お願いいたします。 ほかにも解らなそうな点は、教えて頂けると幸いです。

  • 2進数を16進数に変換するにはどうしたらいいのでしょうか?

    たとえば、10110111110という2進数を16進数に変換するには どうしたらできるのでしょうか?よろしくお願いいたします。 (本などで調べたら、下から4桁ずつ区切るとよいとかいてあったのですが よく意味がわかりませんでした。) コンピュータにあまり詳しくないので、どなたか初歩的に優しく教えていただけないでしょうか?

  • 10進数 → 2進数

    小数点を含んだ実数の、10進数から2進数への変換のやり方がよくわかりません。できるときとできないときがあります。たとえば、 (0.1)_10 = (0.0001100110011・・・)_2 ※(A)_xとは、数値Aのx進数表現というイミです。以下もこの表現を使います。 となるらしいですが、どうやればいいのでしょうか?わかりません。 また、ついでに聞いておきたいことがもう一つあります。小数点を含まない数値の 変換も教えていただきたいです。 たとえば今までぼくは、(101)_10を2進数に変換するのに、 (101)_10 = (100 + 1)_10 = ( 2^2・25 + 1 )_10 = ( 2^2・( 2^3・(2 + 1) + 1 ) +1 )_10 = (2^6 + 2^5 + 2^2 + 2^0 )_10 = (1100101)_2 などという、めんどくさいことをやっていたのですが、もっとスマートなやりかたはないでしょうか? コンピュータもいちいちこんなやり方でやっていたら、計算量多すぎてやってられないような気がするので、きっとあると思うんですけど…簡潔なアルゴリズム…

  • 10進数からn進数への変換

    27という10進数の数字を2進数へと変換する時は 2で割っていて余りを並べることで求めることが出来ますが やり方はわかるのですが、そのようになる理由が理解できません。 27=【(1×2^3)+(1×2^2)+(0×2^1)+(1×2^0)】×2+1(余り) 13=【(1×2^2)+(1×2^1)+(0×2^0)】×2+1(余り) ・ ・ ・ とこのように式での説明をみると、式の上ではそうなるのはわかるのですが・・・・ なぜ27を2で割ったものの余りが2進数の1桁目になるのか、ということを 数式以外で説明できないものでしょうか? そういうものなんだ、というふうに考えるしかないのでしょうか?

  • この10進数は?

    こんばんは。大学1年生です。 コンピュータ関連の授業で、「ある10進数を5進数で表現すると1の位が2桁の数字になり、3進数で表現すると1の位が0となった。この10進数は何か」という問題があり、回答が12(10進数)でした。 12という回答で合っていますか?また、この問題の考え方がはっきりとわからないので、わかる方に教えて頂きたいです。 お手数をおかけしますが宜しくお願い致します。

  • 2進数1101.011に2進数の桁の重みをかけると

    2進数1101.011に2進数の桁の重みをかけるとなぜ10進数になるんでしょうか? それはそういう結果になるからだ、というのはわかっているんですが、私が知りたいのは 2進数1101.011 に10進数の桁の重みをかけたら、10進数に変換される 2進数1101.011 に8進数の桁の重みをかけたら、8進数に変換される 2進数1101.011 に16進数の桁の重みをかけたら、16進数に変換される というのなら納得できるんですが 2進数1101.011 に2進数の桁の重みをかけたら 10進数 というのが納得できません。なぜ、8進数、16進数、3,4,5,6,7,ではなく10進数になるんでしょうか?2進数の桁の重みなのに。

  • ホストコンピュータの数

    IPアドレス 192.173.2.22/23 を持つホストが属するサブネットには、 何台のホストコンピュータが所属可能でしょうか? よろしくお願いします。 算出の仕方も教えていただけるとありがたいです。  

  • 不正接続されているコンピュータ

    ウイルスバスター2008の無線LANパトロールを使っているのですが、パソコンを使う度に不正接続されているコンピュータのIPアドレスが複数表示されます。 表示されるIPアドレスの数はその時々によって違いますが、どれもよく似ています。 IPアドレスを調べた結果、それらは海外のコンピュータだと分かったのですが、それらのコンピュータが危害を加えるものなのかよく分かりません。 それらが危害を加えるコンピュータであるのかどうかはどのように判断すれば良いのでしょうか? また、危害を加えるものであった場合、どのように処理すれば良いのでしょうか? 教えてください。

  • 10進数→2進数への変換が理解できません。

    変換する際に10進数の数を0になるまで2で割ることは分かったのですが、その後がどうも理解できません。 割った数から1か0で並べていくみたいですが、そこが理解できません・・・。 http://www.infraexpert.com/study/ip1.html (10進数から2進数への変換方法を見てください) ここのサイトにも紹介されていますが、2で割った後の青い部分(0か1)に変換する部分が分かりません。 なぜ0は1なのでしょうか? なぜ1は0で、2は1なのでしょうか? 奇数と偶数が関係しているのなら5が0になるのも理解できませんし・・・。 大変困っています。どうか助けてください。お願いします。

  • 10進数から8けたの2進数に変換

    10進数から2進数への変換はわかるのですが 10進数から8桁の2進数への変換がわかりません。 仮に10進数の38を8桁の2進数に直す場合、どんな過程を経て、8桁の2進数になるのでしょうか。 どなたか教えていただけますと有難いです。 宜しくおねがいします。

専門家に質問してみよう