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と関連する良く見られている質問

Q2進法と中国の貨幣について

以前、中国語を勉強していた時に、先生に中国には2元札や2角札2分札があります(日本にも現在は2千円札が存在しますが)。
それは中国が(日本と違って)2進法だからです、と習いました。
2進法の意味も理解せず「そうなんだぁ~」と記憶した自分でしたが、最近知人にその事を話したら、2進法とか10進法とは関係ないんじゃない?
と言われ、ネットで調べてみましたが全然理解できませんでした。
カテゴリー違いかも知れませんが、数学に詳しい方、また何となく聞いた事があるという方、よろしくお願いします。

Aベストアンサー

中国が2進法かどうか知りませんが、
2進数なら使われる数字は0と1であって、
「2」という数字は使われないでしょう。

ということで、「2元札などが存在すること」と「2進法」は無関係でしょう。

そもそも、1元=10角、1角=10分なので、10進法ですよ。

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などと書きます

Q2進法と10進法

2進法と10進法っていうのが良く分かりません。
たとえば 2進法の8桁の数字、
<00000101>を 10進法に直すと5、
<11111111>なら 255、
<01111111>なら 127、って??
べたべたの文系にも分かるように教えてください。よろしくお願いします!

Aベストアンサー

こんにちは。細かく説明すると長くなりますので、こちらを見てみて下さい。何となく分かるような気がします。

参考URL:http://www.nikonet.or.jp/spring/sanae/MathTopic/numor/numor.htm

QN進法について

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

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

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

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

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

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

Aベストアンサー

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

Q2進法の利点

今日の数学の授業で少しだけ n進法 について授業を受けました。
その先生は生徒に対して、10進法についてどう思うか、みたいな事を聞いて先生自身は悲しいと言っていました。先生は(あまり話自体完全に覚えているわけではないので簡潔に書かせてもらうと、)なんで10進法なんて面倒な物を作ったんだ、と。先生が考えるには10になったのは指が10本だからではないかと言っていました。
さらに話が進んで、2進法の事も話し始めて、仮に人類は2進法を使っていたら文明はもっと進んでいて、PCは何十年も前に出来ていたのではないかとも言っていました。n進法のnが指の数だとしたら、2進法は両指2本で生活に不自由だとか、ドラえもんは0進法で指が無いのに物をどうやって掴んでいる(笑)などと面白い話をしてくれましたが。
なぜ2進法になるだけでそんなにも文明や科学が変わってしまうのでしょうか。
*補足にはなりますが、その先生は校内の数学の先生の中で一番教える事が上手と評判のベテランの先生なので、バカな先生が言った雑談とは思わないで下さい。

Aベストアンサー

20世紀の後半以後,コンピュータの発展は社会生活の様々な分野に影響を及ぼすようになってきました.コンピュータでは,電気が流れる(1),電気が流れない(0)の2つを組合せて様々な処理を行っています.この0と1だけからなる信号は二進法に対応しています. このコンピュータが社会生活に深く浸透する中で,計算だけでなく,絵,写真,さらに話し言葉の送受信にも二進法が使われるようになり、二進法が発展したのでしょう。


では次に2進法のメリットについて、コンピューターと言うと、電子計算機を指しますが、その昔、電気計算機と言う物が企業の事務方で実用されていました。中身は、ギヤー(歯車式)が一回転すると、桁上がりする、いわゆる10進式で加減算、乗算、割り算を高速で処理してましたが、プログラム式では無いので、電気ソロバン的代物でしたが、ソロバンよりはずっと早く便利な機械でした。10進数は、人間の指が10本有るところから、10進数と言う概念が生まれたそうです。
10進数が本当に便利なのは、0と言う概念がインドで発明されたお陰だそです。
10進数はとても便利なようですが、四捨五入のような曖昧もこの面があり、完全な物では有りません。
1.1を1とし、1.2を2とし、1.3を3とするような3進法が有ったとすると、1.199999999999999999999999999は、1なのか、2と扱うべきか、判断をしかねます。
その点、1か0か、真と偽で判断すれば、曖昧さは無くなり、判断と言う余計なプロセスも必要無く成り間違いが無く成ります。
計算に、曖昧さや間違いは絶対に許されないので、真と偽と言う、絶対に間違えが無いような方法を取り入れようとすれば、(コスト面も重視)今の段階では、2進法に勝るものは無い(飽くまで今の段階では)。

20世紀の後半以後,コンピュータの発展は社会生活の様々な分野に影響を及ぼすようになってきました.コンピュータでは,電気が流れる(1),電気が流れない(0)の2つを組合せて様々な処理を行っています.この0と1だけからなる信号は二進法に対応しています. このコンピュータが社会生活に深く浸透する中で,計算だけでなく,絵,写真,さらに話し言葉の送受信にも二進法が使われるようになり、二進法が発展したのでしょう。


では次に2進法のメリットについて、コンピューターと言うと、電子計算機を指...続きを読む

Q16進数を10進数に変換

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

Aベストアンサー

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

Q10進法から2進法へ。

こんにちは^^)今レポートをやっています。
2進法を10進法に直すやり方は、自分なりに理解できました。
ですが、10進法を2進法に直すとき、なぜ2で割り余りを明記していくのか、その理由がわかりません。しかも以下問題文の答えは、(101100)だと思うのですが、他の位は全て余りを明記してるのに、この数の一番大きい位の1だけは、3÷2=1あまり1の商を明記してるんですよね?なぜでしょうか?

(問題)
(108)10を2進法になおせ。

この問題で、わかりやすく説明していただけないでしょうか?
よろしくお願いします。質問は、以下の2点です。
(1)10進法から2進法になおすとき、なぜ2で割りあまりを明記するのか?
(2)なぜ、あまりだけを明記するのではなく商も明記するの??

Aベストアンサー

2進数はなぜ2で割って余りを求めるのか、だけ説明します。

簡単のため、私の思った10進数を、あなたが10進数で表すことにします。(変ですが、理由はあとで分かります)
直接聞かないでください。例えばこう聞いてください。
「その数を10で割ったら、余りはいくつですか?」
私が「6」と答えたら、これは1の位の数だと分かりますね。
そうしたらまた聞いてください。
「さっきの答を10で割ったら、余りはいくつですか?」
さっきの答は、最初の数に比べて、桁が1つ落ちていることに着目してください。私が「4」と答えたら、これは10の位です。
これを続けていきます。そうすると、正体が1の位からバレてきますね。
これは2進数でも同じです。2で割って余りを求め、答は1桁落ちていく。この繰り返しです。

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

Q2進法などのxについて

はじめまして。
プログラミングではないのですが、
会社から2進法・10進法・16進法の計算を
覚えろということで今勉強しております。

プログラミングをするわけでは無いため
何言語やソフトなどかはわからず、
こちらのジャンルへの書き込みをさせて
いただいてしまいました。

2進法・10進法・16進法の変換の仕方などは
サイトを回り理解したのですが
会社から渡されたプリントの問題の中に
『0x56を2進法で表記した場合・・・』という
問題があり、この中の『x』(エックス?)とは
何なのかがどうしてもわからずこちらで
質問させていただきました。

是非教えていただけると助かります。
よろしくお願いいたします。

Aベストアンサー

0x56は16進数表記であることを示します。

単に56と書いても10進数だか16進数だかなんだか分かりませんよね。
(56)16   ※16は")"の右下に小さく表記
と書く場合もありますが、
16進数においては0x56と表記されることは多いです。

もちろんお分かりになるだろうとは思いますが、
『0x56を2進法で表記』なら 01010110、
10進法表記なら86ですね。。

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ランキング