• ベストアンサー

8進法の計算

独学でプログラミングの勉強をスタートしましたが、ビット数の概念を理解するにあたり、進法(例:2進法、16進法など)が使われており、早くもそこで躓いてしまいました。 テキストの質問: 6ケタの8進法を使用するコンピューターの場合、 1)何ビットとなるか? 2)8進法で、このコンピューターに内臓できる最大の整数は? 3)10進法と関連する数字はあるか? 4)最大の負の整数は、8進法と10進法では何になるか? 8進法について分かりやすく説明して頂けますでしょうか? 宜しくお願い致します。

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

  • ベストアンサー
  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.4

まずは、計算機の数値表現(二進数)をしっかりマスターしてください。8進法、16進法は、単にそれが表記しやすいから使っているだけですので、基本は2進法です。 http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE 計算機で2進法を使うのが便利な理由は、電気回路などの状態を表しやすい、例えば、電気がON/OFF、光ってる/光ってない、穴が開いてる/開いてない(昔のパンチカードなどですね)などが表しやすいからです。この状態一つを記憶する容量をビット(即ち2進法一桁分)といいます。 なので、全部2進法で表記できるのですが、桁が長くなりすぎるので、これをまとめて8進法、16進法で表記しているだけです。(2進法4桁分が16進法一桁、2進法3桁分を8進法一桁) 最近では8進法はあまり見かけませんが。 この理屈さえ分かっていれば、基本は2進法を習得するだけで十分です。 1) 2進法3桁(即ち3ビット) × 6 = 2進法18桁 (18ビット) 2) 2進法 111 111 111 111 111 111 (8進法と関連付ける時は3桁ずつ区切ると分かりやすい)    8進法 7   7   7   7   7   7    10進法 8^5 * 7 + 8^4 * 7 (…省略…) 8^1 * 7 + 8^0 * 7          =262143 2^17 + 2^16 + (省略) + 2 3) 0,1,2,3,4,5,6,7 は10進法と同じ (8,9は8進法では使われない) 4) 2進法では、100 000 000 000 000 000  8進法では、   4   0   0   0   0   0 10進法では、 8^5 * 4 * (-1) = -131072 ご参考に。

lvndht
質問者

お礼

2進法が基本となるのですね。 確かに2進法がわかれば、8進法も10進法も計算できました。 わかりやすいご説明がありがとうございました。

その他の回答 (4)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

(4) 負の表現方法が示されていないので回答不能です。 負の値を表現する方法は何通りもあって、それぞれで表現できる値の範囲が変わります。 http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE

lvndht
質問者

お礼

ようやく2進法が理解できたところなので、負の値までは、、、参考とさせて頂きます。ご指摘ありがとうございました。

  • info22_
  • ベストアンサー率67% (2650/3922)
回答No.3

1)何ビットとなるか? 8進法の一桁は8=2^3で2進法の3桁(3ビット)で表わすことができるから 8進法6桁は 3(ビット/桁)×6(桁)=18(ビット) となります。 2)8進法で、このコンピューターに内臓できる最大の整数は? 符号無し整数であれば 最大整数は 777777(8進)=1000000(8進)-1=8^6 -1=(2^3)^6 -1=2^18 -1=262143 符号付き整数であれば 符号に1ビットとられるから 最大整数は 377777(8進)=400000(8進)-1=4*8^5 -1=2^(2+3*5) -1=2^17 -1=131071 3)10進法と関連する数字はあるか? 慣れれば10進法と同じ加減乗除算が出来るでしょう。 4)最大の負の整数は、8進法と10進法では何になるか? 2の補数法であれば 最大の負の整数は -1(10進)=777777(8進) 絶対値が最大の負の整数は  400000(8進)=-2^17=-131072(10進)

noname#231223
noname#231223
回答No.2

2)は回答間違い。 符号ビットなしならば、 777777(OCT)ですね。

noname#231223
noname#231223
回答No.1

1)8進数1桁は、2進数3桁に相当するので、2進数18桁と同じ。 2)符号ビットを使わない整数なら、8^6-1=2^18-1 3)問題の意図がわからないが、10進数と8進数で表記が対応する(同じ)のは0~7 4)8進数で400000 2進数の基本がわからないと苦しいでしょう。 特に4)は、2の補数による負の数の理解が必須です。 2進数の基本がわかれば、16進数だろうが8進数だろうが、楽勝ですね。

関連するQ&A

  • 10進法

    ここに、質問するのがベストかどうかわかりませんが、 世の中では10進法が使われていますが、これは人間の手や足の指が 10本あったからなんでしょうか? それとは別に、 コンピューターは2進法で動いていると聞きました。2進法ということは、大きい数を表すときには桁が10進法であらわすときの5倍必要だとおもいます。 コンピューターにとって、桁が多いのと、10進法や20進法などといったように進法の数を増やすのでは桁を増やすほうが得意なのでしょうか? うまく説明できませんが、教えてください。

  • 生活の数を10進法以外に作ったらどうか?特に値段のつけ方について

    数学で勉強して無駄だったと思われることに、「進法」がありました。2進法の10110とかの類です。2進法はコンピュータ概念でいいとして、他の進法は使い道がありません。 そこで身の回りの生活で出てる苦数は、みな10進法ばかりです。これを多国籍語ならぬ多進法数を導入したらどうでしょうか。 例えば6進法などが結構つかえるのではないか。 そうすると1980円なんていういかがわしい値段が、3300円ということになります。これだと、だまされたりいたずらに購買意欲をかきたてられたりしなくてすみますよね。 全くメリット無いでしょうか。貨幣は今のままで間に合います。

  • 60進法と10進法

    違いがいまいち分かりません。 時間は60進法だと言いますが、100分など60以上の数でも表せますよね? そもそも、60という数自体、10進法の数字ではないのでしょうか。 それに一日が24時間だというのも気になります。 時間が60進法なら60時間で一日にならないのでしょうか。 というか、自分が「進法」という概念をきちんと理解しているのかさえ怪しいです……。 また、3進法や100進法なども存在するのでしょうか。 存在するなら、どのような場合に使われるのでしょう。 時間以外に60進法を使う場面があればそれも知りたいです。 数学から離れて久しいド文系ですので、易しい解答を宜しくお願い致します。

  • 小数の10進法→n進法の考え方について

    整数の10進法→2進法の場合 27という数字を2で割るのは 2で割ることで 2個ずつまとめた塊をつくり その塊に入れなかった余り1が「1の桁」になる そしてその塊13を2で割ると「26を2個ずつまとめたセット」を2個ずつまとめた塊6個を求めることが出来て、その余りはもともと「2個ずつまとめた塊」だから、その余り1は「2^1=2の桁になる」 というように考えられると思うのですが 小数の場合をうまくイメージすることが出来ません。 この同じ考え方を小数にあてはめて考えてみたのですが、小数のためややこしくなってしまい混乱してしまいました。 小数の変換を「10進法→n進法」をこのようにうまく理解する方法は無いでしょうか? よろしくお願いします。  

  • n進法についての問題です。

    nを2以上の整数とした時 n進法で表されて4桁の数abcd(n)のうちa=d≠0 b=cであるものを n進法の4桁回文とよぶ。 (1) 4進法の4桁回文全ての最大公約数を求めよ。 (2) n進法の4桁文は全てn+1で割り切れる事を示せ。 ※宜しくお願いします。

  • n進法の変換!

    数学が得意で、Excelの達人の方!(じゃなくてもいいんですが……) たとえば、Windowsに載っている、電卓を関数モードで使うと、16進法10進法8進法2進法の変換ができるんですが、ほかには変換できません。 と、言うことで、数字(12桁以上必要)を入れると、ほかの進法に変わるシートを作りたいんですが、ぜんぜんうまくいきません。 誰か、うまいのを教えてください。体裁は気にしません。  ※変換前のn進法のnを、たとえばA2に入力  ※変換後のn'進法のn'を、たとえばA3に入力  ※変換する、n進数を入力 と、こんなシートを作りたいんです。 よろしくお願いいたします。

  • プログラミングにビットについて

    独学でプログラミングを勉強しているものですが、ビットについてまだ完全に理解できていません。 ビットというのは、メモリだとか、容量だとかという大雑把なことは分かっているのですが 詳しく完全に理解できてるわけではありません。 そこで 今日変数の復習をしていた所 教本の説明の欄の ○○(数字)ビット符号付き整数 みたいなものに疑問をもちまして 例えばintなら32ビット符号付き整数というような説明の形なのですが この場合のintの説明の解釈というのは 二進数で0一つで1ビットを占めているとして 32ビット符号付き整数というのは 二進数で言う+(-)0x31の数値を表現することができ、 なので この場合、+(-)を1ビット占めているので表現できる数字は10進数で言う+(-)2^31-1が限界ということでいいのでしょうか?

  • JAVAのプログラミングです

    JAVAのプログラミングを教えてください 整数Xの十進表記を1桁右に循環的にシフトした(つまり、最右桁の数字を最左桁の位置に置く)数が、Xの2倍であるような整数Xのうち、最小のものを求めよ。 これをJAVAでプログラミングせよ。とのことです

    • ベストアンサー
    • Java
  • 公務員の数的処理の問題でわからないので教えてくださ

    七進法で表した二桁の整数を五進法で表すと各桁の数字がいれかわった。この数を六進法で表すといくらか。

  • 5ケタの正の整数

    こんばんは。 SPIの問題を解いておりましたら、分からない問題が出てきまして。。。。。。。。 5ケタの正の整数72□□2があります。 この□□に適当な数字を入れて3の倍数となるようにした時、最大のものと最小のものの差はいくらですか。 このような問題です。 解答欄を見てみますと。。。。。。。。 3の倍数の見分け方は、各位の数字の和が3の倍数であるかないか。 5ケタの正の整数72□□2では、 7+2+□+□+2が3の倍数であるようにする。 従って、 最大は72972。 最小は72012。 その差は960である。 。。。。。。。。。。。。。このようになっていたのですが。。。。。 3の倍数の見分け方は各位の数字の【和】が3の倍数であるかないか、という定義(概念?考え方?)が今いちピンとこないです。。。。。。。。。。 7+2+□+□+2が3の倍数になるかならないかが問題を解く鍵になる。。。。。。。。。 根本の部分がダメなんでしょうね。。。。。。。。 試験まで丸暗記するしかないかな。。。。。。。と今は思ってます(苦笑) お時間のある時に回答して頂けると幸いです。