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

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

このQ&Aに関連する最新のQ&A

A 回答 (6件)

言語はなんでしょうか。


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

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

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

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



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

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



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

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

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



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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q進数変換のプログラムタイトルの由来

進数変換のプログラムのタイトルでは
dec2bin
dec2hex
bin2dec
bin2hex
hex2bin
hex2dec
などのタイトル名を聞きます
dec(10進),bin(2進),hex(16進)なのは分かるのですが、真ん中の"2"の意味がわかりません。このタイトルの由来を知っている方是非教えてください。

Aベストアンサー

英語の慣用表現で2=toです from dec to bin
forを4 youをuなどと書きます

QN進法について

お忙しい中お願いがあります。

学校の授業でノートを取ったのですが、その中でわからない点がありお聞きしたいと思いました。

内容は「基数とはN進法のN」(0からN-1番目の数字で表現)とありましす。

「0からN-1番目」とは何のことかわかりません。

N-1ばんめとはなんのことでしょうか?

どなたかよろしくお願い致します。

Aベストアンサー

基数が10の数とは10進法で表現された数のこと。10進法では数値を0から9の数字の組合せで表現する。

Q16進数を10進数に変換

16進数「1CB」を10進数に変換した値はどうなるのでしょうか?分かる方いらっしゃいましたらお願いします。

Aベストアンサー

1 * 16^2 + 12 * 16 + 11
= 459

QX86アセンブラで 16進数を10進数のASCIIコードに変換する方法

X86アセンブラで16進数から10進数のASCIIコードに変換する方法を模索しております。

例:  0x64(100d)
期待値:0x31 0x30 0x30 ("1","0","0"の3ByteのASCIIデータ)

といった内容になります。
論理演算等で求める手法がございましたら、ご教授頂ければ幸いです。

Aベストアンサー

テーブルを用意すればコード自体は簡単にできますが、その他の解です。

hexに16進数、asciiに変換後のASCIIコードの10進数を格納するとします。

hex db ?
ascii db 3 dup (?)

コードは以下になります。

moval,hex
aam
oral,30h
movascii+2,al

moval,ah
aam
orax,3030h
movascii,ah
movascii+1,al

Q16進数の小数を10進数に変換する方法について

16進数の小数0.248を10進数の分数で表わすと73/512となりますが、
この答えの導き方についてです。

ある参考書に以下の説明がありました。

2×16×16+4×16+8
-------------------
  16×16×16

上記の分子に関して、なぜ2に16が2回乗算されているのか、
なぜ4に16が乗算されているのか理解できません。

分母になるはずの16がなぜ分子にあるのか??
という疑問を抱いております。

どなたか、上記の理由について、教えて頂けませんか?

Aベストアンサー

512自体を16のn乗のみであらわせないため 512より大きい最小の16のn乗は4096(16の3乗)になります

つまり分母が512を4096にします
分母を大きくするのですから分子も同様にしないとおかしくなります
分母を8倍にしたのですから分子も8倍にし584にします

584を16進で因数分解すると
2x16^2 + 4x16 + 8と分解できます

よって
2x16^2 + 4x16 + 8
-----------------
   16^3
といった表記になるのでしょう

2/16 + 4/256 + 8/4096 を4096で通分しています


人気Q&Aランキング

おすすめ情報