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

8進法 16進法 2進法について、

10進数を各進法に変換する方法を教えて下さい。

A 回答 (6件)

私が知っている変換の仕方です。



X・・・変換したい数
B・・・変換したい進法

(1) X÷Bをして商と余りを出す。余りは変換後のB進法の数の最下位になる。
(2) さらに(1)の商に対して同じくBでわり、商と余りを出す。余りは(1)の余りを書いた位の1つ上の位になる。(要するにこの場合は下から2桁目に書く)
(3)これをずっと繰り返し、商が0になるまで続ける

具体例
85を8進数に変換

8)85
 ~~~~~~
8)10・・・5
~~~~~~
8) 1・・・2
~~~~~~
8) 0・・・1
~~~~~~
      ↑ここが答え
よって85(10進)=125(8進)


どうでしょうか?
    • good
    • 0

ある数 n を x進数に変換する時、



n を x で割った余りが x進数の 1桁目になり、
n を x で割った商を、さらに x で割った余りがx進数の 2桁目になります。

商が0になるまで同様に繰り返せば変換終了です。
    • good
    • 0

使用する言語はなんなんでしょ?



VB及びVBAですと、「参考URL」の拙文がお役に立つかもしれません。

アルゴリズムに関してのご質問でしたら、

1: 10進数の数値を、整数型の変数に格納する。
2: AND演算子を使って、ビットごとに切り分ける(16進数なら、4ビットごと、8進数なら、3ビットごと、2進数なら1ビットごと)
3:切り分けた各部分に対して符号化を行う

ってな感じになります。

変換後の値のみが知りたいっていう場合でしたら、Windows付属アプリケーションの「電卓」を使えばいいですね。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=5200
    • good
    • 0

10進数『35』としましょう。



【2進数にする方法】

 2で割でどんどん割ります。
 
 35÷2=17 あまり『1』
 17÷2= 8 あまり『1』
  8÷2= 4 あまり『0』
  4÷2= 2 あまり『0』
  2÷2= 1 あまり『0』
  1÷2= 0 あまり『1』 答え→100011

*答えは下~上に向かって読みます。

【8進数にする方法】

 8でどんどん割ります。

 35÷8= 4 あまり『3』
  4÷8= 0 あまり『4』 答え→43

【16進数にする方法】

 16でどんどん割ります。

 35÷16= 2 あまり『3』
  2÷16= 0 あまり『2』 答え→23

*16進数の場合、あまりが2桁になってしまったら、
 アルファベットで『A・B・C・D・E・F』と
 表します。
 
   あまり『10』なら『A』
   あまり『11』なら『B』
   あまり『12』なら『C』
        ・
        ・
        ・
   あまり『16』からは数字で表します。
   『10・11・12・…………』

   あまり『16』なら『10』
   あまり『17』なら『11』
   あまり『18』なら『12』
        ・
        ・
        ・
        ・



 

この回答への補足

詳しい解説有難うございます。

ただ、16進法がややわかり辛いです。

例えば100なら16進ではどうなるのですか?

補足日時:2000/11/27 02:52
    • good
    • 0

16進数がわかりずらい。

との事でしたので補足します。

2進数は、おわかりですね。
2進数を表せば16進数とは親戚の様に簡単になります。

01000001 →これを4つづつに分ける→ 0100 0001

そして、左と右に分けて次のルールで勘定する。

○○○●→1 (十進数)
○○●○→2 (十進数)
○●○○→4 (十進数)
●○○○→8 (十進数)

もし、0001 なら、十進数で「1」。
もし、0010 なら、十進数で「2」。
もし、0011 なら、十進数の1と2を足した答え「3」。
もし、0101 なら、十進数の1と4を足した答え「5」。
もし、0111 なら、十進数の1と2と4を足した答え「7」。
・・・以下同様

この様な感じで変換すると、簡単になるよ。

01000001 →これを4つづつに分ける→ 0100 0001

0100 0001は、
0100 → 4(十進数)
0001 → 1(十進数)
になるので、

41(16進数)

もうちょっと難しい問題をあげると・・・

11001111(2進数)を変換するとこうなります。

1100 1111 の二つに分け
8+4 と 8+4+2+1
12と15

だから、「1215」と言う答えは×です。

16進数は、10以上は英字になるからです。

十進数対16進数の表を書いておきますので参考にしてね。

0:0
1:1
2:2
3:3
4:4
5:5
6:6
7:7
8:8
9:9
10:A
11:B
12:C
13:D
14:E
15:F
------ここから16進数は二桁になります
16:10
17:11
18:12
・・・以下同様。

従って答えは、

12と15(十進数)は、
CF(16進数)が答えです。

尚、単位は、
2進数(B)Bitの略です。
10進数(D)Digitの略です。
16進数(H)Hexdecimalの略です

11001111Bは、CFHが答えです。

アセンブラやC言語をマスターする上でこの2進数&16進数はマスターしておくとビットシフトやデバッグ時のダンプなどで重宝しますよ!!
    • good
    • 0

言語はなんでしょうか。


VBでの方法も、どの言語でも使えそうな計算方法もみなさん書いてらっしゃるので、Cオンリーな方法をご紹介します。

共用体とビットフィールドをつかって、計算なくn進数を求める方法です。
ただしnは2のm乗です。

ここでは32ビット整数を16進数に変換します。
以下をmainの中かどっかに貼り付けてください。

----------------------------------------
union{

struct{

unsigned keta1: 4; //1桁目
unsigned keta2: 4; //2桁目
unsigned keta3: 4; //3桁目
unsigned keta4: 4; //4桁目
unsigned keta5: 4; //5桁目
unsigned keta6: 4; //6桁目
unsigned keta7: 4; //7桁目
unsigned keta8: 4; //8桁目

};

unsigned long kazu;

};

kazu = 1234567890;
----------------------------------------
これを実行しただけで、たとえば16進数の3桁目がketa3に入っています。

unsigned keta1: 4;
の4の部分を3とかに変えて、合計が32ビットを超えるように桁を増やせば、8進数(2の3乗)とかもわかります。

この方法ではketa2とかに13とかいう値が入っているので、文字Dとかに変換しなければなりませんね。

この方法は、アルゴリズムを考えると、計算などで求めるよりもはるかに高速です。
命令文は代入だけですから。

ぐだぐだ書いてしまいましたが、Cを使っていなければ何の意味もありませんね。

共用体とビットフィールドが大好きな、はぽるんでした。
    • good
    • 0

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