- ベストアンサー
8・16進数の引き算を教えてください。
プログラミングの知識全くありません。本日PCスクールで進数の引き算を勉強したのですが全く分かりません。。。桁下げって物が私の無能の頭では理解できないのです。下記の問題を手取り足取り解説頂けると助かります。ちなみに先生からは一度2進数に直して計算し、最後に8進数・16進数に戻すように指導されたので、そのとおり教えて頂けるとうれしいです。 (1)234(8)ー37(8) (2)7543(8)-6756(8) (3)3C(16)-1E(16)
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
説明不足で申し訳ありませんでした。 010000000=001111111+1 は取りあえず置いておいて 逆から考えて行きましょう 前回答を逆からなぞって下さい。 答えである『00111101』は既に+1されていますので、 これを分離して元の『+1』にします すると00111100と+1になります ※この『+1』は脇に置いて残して置きます。そうすると残ったのは00111100ですね 次に00111100は00000011を《引き算》したものなので、元の形にするには逆に足し算してあげる必要があります +00111100 ←段差が付くので+を先頭に付属 +00000011 すると00111111になりますね で脇に残しておいた『+1』を付け足すと 00111111+1になってこれを加えてやると +00111111 +00000001 すると01000000になります。 ここで注目するの00111111から一桁上がって01000000になっている点 逆に言えば『+1』の形にすれば一桁下がって00111111になっていますよね pekopokoniさんの質問される『桁下げ』の意味は、今回も前回も最後に行われる『+1』の取り扱いな訳です。 補足にありました 1 111 112←隣の桁から借りてきた値(合ってるか怪しい) の最後の2は『+1』の意味です よって010000000から『桁下がり』するという事は『+1』を分離させて桁を下げ計算し、また『+1』してあげる事になります。 補足 01000000 ←7桁目が1 00111111 ←6桁目まで1 7桁>6桁 ※不等号
その他の回答 (5)
- Qwerty-36
- ベストアンサー率25% (58/226)
2進数二桁の引き算も出来ないの? 10-01=01 01-00=01 01-01=00 これ、判ります? あと、10進数と同じ。引き算で引けない場合は、上の桁から1を借りる。 数学じゃなくて、算数だけど。
- syuitilwo
- ベストアンサー率30% (169/547)
説明不足で申し訳ありませんでした。 010000000=001111111+1 は分かりますか?方程式で考えて見て下さい。 例を10進数で 50-20 = 49-20+1 ↑の方程式が成り立つのはお分かりでしょうか? ☆つまり、『目的の数字』に『1足りない数字』に1足してあげましょう!!!そうする『目的の数字』になる。 そこで ★『目的の数字』じゃあ引き算が難しそうだなぁ じゃあ『1足りない数字』から引き算して、その後「1」足してやれぇ!!! と言う事です。 010000000=001111111+1 ←方程式 方程式で=が成り立つならば010000000の代わりに0111111+1を使っても良い!と言う事です。 なので 010000000-000000011 = 00111111-000000011+1 と言う方程式も成り立つ訳です。 つまり +00111111 -00000011 で引き算をして得た数字→00111100に+1 +00111100 +00000001 で足し算して得た数字→00111101 と言う答えが出てきますがいかがでしょうか? 方程式が駄目って場合はさらに説明が長くなりますねf(^^;
補足
ご親切に本当にありがとうございます<(_ _)> 何度も申し訳ないのですが、方程式じゃない方法もご指導頂けないでしょうか。。。 学生時代から数学かなり嫌いだったので、もっと理解しやすい方法があるならありがたいです。 本当に申し訳ありません
- 123isao
- ベストアンサー率54% (186/341)
桁下げといっても10進数と同じです。 同じ桁で足りないときは上の桁から進数分借りてきます。 10進数で 21-2は10+(10+1-2)で19 8進数だと 21-2は10+(8+1-2)で17 16進数だと 21-2は10+(16+1-2)で1F 8進数から2進数へは3桁区切りで直せます。 1桁ずつ2進数に直すだけです。 234は010011100です。 16進数から2進数へは4桁区切りで直せます。 234は001000110100です。
- syuitilwo
- ベストアンサー率30% (169/547)
8進数と16進数はさわりしかやった事がないのでそのつもりでお願いします。 8進数で最大の7を2進数に直すと=111 16進数の最大15を2進数に直すと=1111 (1)の引かれる方234を2進数にし桁区切り「|」を入れますので間違わないでください 010| 011| 100 ↑2 ↑3 ↑4 次に引く方37を2進数にし桁区切り「|」を入れますので間違わないでください 000| 011| 111 ↑0 ↑3 ↑7 この様にします。此処までできますか? 上の010011100から 下の000011111を引く ここの考え方2進数上の同じ桁(つまりこの場合上下同じ所)を引き算してみる。 すると0-0=0ですね 同じく1-1=0ですね 1-0=1は分かりますよね? ですが0-1=?なのだと思います。←とりあえず置いとく事にして +010011100 -000011111 ↑の計算出来る所を先にやってしまうと (スペースキーだと段差が出来るので便宜上『+』を付けてます) +010000000 -000000011 って事になりますよね?此処まで分かりますか? 次に桁下がりを行います。 つまり 010000000=001111111+1 分かりますか?010000000は001111111に+1して桁上がりさせますよね。これを使って置き換えると +001111111+1 -000000011 って事になりませんか? ここまでこればもう簡単!先ほどの同じ桁の引き算が使えますよね。つまり 001111100+1 って事になりますね 後は最後の+1を足し算処理します。 すると001111101に成りました。 これを8進数に直してあげれば良い訳です。 また桁ごとに「|」を入れますと 001| 111 | 101 ↑1 ↑7↑5 つまり答えは「175」になります。 答え合わせとして10進数で計算します。 234(8)=156(10) 37(8)=31(10) 156-31=125(10) 先ほどの答え「175」を10進数に直すと 175(8)=125(10) 見事にぴったりっすぅ\(^o^)/ 分かりました?
補足
親切にご回答ありがとうございました。本当に私頭が固くてどうしようもなく、「つまり010000000=001111111+1…」以下から混乱状態になってしまいました。バカで申し訳ありません。 学校では 1 111 112←隣の桁から借りてきた値(合ってるか怪しい) +010 011 100 -000 011 111 001 111 101←答え ↑ ↑ ↑ 1 7 5 (8) と教わったのですが、「隣の桁から借りてきた値」ってのがどうしても理解できなくて、非常に困ってます(T_T) 先生がおっしゃってる意味理解できますか?先生に質問してもちゃんと答えてくれなかったので…お忙しいところ申し訳ありませんがアドバイスお願いいたします。
10進と同じですよ。 「10」進では上の位から1を持ってくると、下の桁に「+10」 「8」進では上の位から1を持ってくると、下の桁に「+8」 「16」進では上の位から1を持ってくると、下の桁に「+16」 するだけです。 わざわざ2進にする必要ありません。
お礼
何度もありがとうございました。やっと理解できました。 お忙しいのに申し訳ありませんでした…感謝です<m(__)m> 学校は春まで続くので、また??な出来事に遭遇したらお助けください。 本当にありがとうございました。