プロが教えるわが家の防犯対策術!

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

A 回答 (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);
}
}
    • good
    • 0

ご存じの通り、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」となります。

長文かつ質問の趣旨とずれていたらごめんなさい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/05/26 10:16

8進法、16進法では、「添え字」というものがありまして、8進法であれば「0」、16進法であれば「0x」を頭に付けます。



ですので、問題集の意図は「0777」は添え字を取って「777」、「0xdeadbeef」は「deadbeef」ということではないでしょうか?

ちなみに、Windows標準ツールの電卓を使用し、「表示」→「関数電卓」を選択すると、8・16進法の数字が通常の10進法で表現するといくつになるか、簡単にわかります。

このような回答で、質問の意図がカバーできているでしょうか…?
    • good
    • 0

F:15×1


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

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