• ベストアンサー

8進数と16進数表現について

「0777」は8進数表現で「777」、 「0xDeadBeef]は16進数表現で 「DeadBeef]と問題集にあったのですが、解答が詳しく載っていませんでした。 計算方法がおわかりの方教えてください。

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

  • ベストアンサー
  • zeroha
  • ベストアンサー率62% (10/16)
回答No.3

ご存じの通り、10進数は0~9の10個の数字を使い、9の次は 桁が一つ上がり10になります。 同様に8進数は、0~7の8個の数字を使い、7の次は桁が 一つ上がり10になります。 同様の考えで、16進数は16個の数字を使い数字を表すの ですが、9以降の数字を表す為に、A~Fのアルファベットで 代用します。 従って10進数の「10」は、8進数の「12」、16進数の「A」に該当します。 8進数-10進数-16進数対応表 . 8進数:0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 10進数:0 1 2 3 4 5 6 7 . 8 . 9 10 11 12 13 14 15 16 16進数:0 1 2 3 4 5 6 7 . 8 . 9  A  B  .C  D  E  F 10 次に、10進数の2345を分解する手順は以下のように 2,000+300+40+5(10進数) =2x10^3+3x10^2+4x10^1+5x10^0 =(2x10x10x10)+(3x10x10)+(4x10)+(5x1) となります。 ※10^3 は10の3乗を意味します。 ※10^0は1です。 これを元に、 8進数の2345を計算(10進数に変換)する場合 2,000+300+40+5(8進数) =2x8^3+3x8^2+4x8^1+5x8^0 =(2x8x8x8)+(3x8x8)+(4x8)+(5x1) =1,024+192+32+5(10進数) =1,253(10進数) と計算出来ます。 16進数も同様に 2,000+300+40+5(16進数) =2x16^3+3x16^2+4x16^1+5x16^0 =(2x16x16x16)+(3x16x16)+(4x16)+(5x1) =8,192+768+64+5(10進数) =9,029(10進数) と計算出来ます。 また、16進数のABCを変換する場合は A00+B0+C =Ax16^2+Bx16^1+Cx16^0 =10x16^2+11x16^1+12x16^0 =(10x16x16)+(11x16)+(12x1) =2,560+176+12 =2,748 となります。 上記の内容から、 8進数の「777」は10進数の「511」 16進数の「DeadBeef」は、10進数で「3,735,928,559」となります。 長文かつ質問の趣旨とずれていたらごめんなさい。

homankun
質問者

お礼

大変参考になりました。 どうもありがとうございました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

以下を実行してみて下さい。勘違いしてたらごめんなさい。 public class Sample { public static void main(String argv[]){ System.out.printf("8:%o 10:%d%n",0777,0777); System.out.printf("16:%x 10:%d%n",0xDeadBeef,0xDeadBeefL); } }

  • tee3
  • ベストアンサー率23% (3/13)
回答No.2

8進法、16進法では、「添え字」というものがありまして、8進法であれば「0」、16進法であれば「0x」を頭に付けます。 ですので、問題集の意図は「0777」は添え字を取って「777」、「0xdeadbeef」は「deadbeef」ということではないでしょうか? ちなみに、Windows標準ツールの電卓を使用し、「表示」→「関数電卓」を選択すると、8・16進法の数字が通常の10進法で表現するといくつになるか、簡単にわかります。 このような回答で、質問の意図がカバーできているでしょうか…?

  • raphel_7
  • ベストアンサー率34% (86/252)
回答No.1

F:15×1 E:14×16 E:14×256 B:11×4096 D:13×65536 A:10×1048576 E:14×16777216 D:13×268435456 を計算して足せばいい

関連するQ&A