プロが教える店舗&オフィスのセキュリティ対策術

プログラミングの知識全くありません。本日PCスクールで進数の引き算を勉強したのですが全く分かりません。。。桁下げって物が私の無能の頭では理解できないのです。下記の問題を手取り足取り解説頂けると助かります。ちなみに先生からは一度2進数に直して計算し、最後に8進数・16進数に戻すように指導されたので、そのとおり教えて頂けるとうれしいです。

(1)234(8)ー37(8)
(2)7543(8)-6756(8)
(3)3C(16)-1E(16)

A 回答 (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桁 ※不等号
    • good
    • 1
この回答へのお礼

何度もありがとうございました。やっと理解できました。
お忙しいのに申し訳ありませんでした…感謝です<m(__)m>
学校は春まで続くので、また??な出来事に遭遇したらお助けください。
本当にありがとうございました。

お礼日時:2005/12/06 17:22

2進数二桁の引き算も出来ないの?


10-01=01
01-00=01
01-01=00
これ、判ります?

あと、10進数と同じ。引き算で引けない場合は、上の桁から1を借りる。
数学じゃなくて、算数だけど。
    • good
    • 0

説明不足で申し訳ありませんでした。


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(^^;

この回答への補足

ご親切に本当にありがとうございます<(_ _)>
何度も申し訳ないのですが、方程式じゃない方法もご指導頂けないでしょうか。。。
学生時代から数学かなり嫌いだったので、もっと理解しやすい方法があるならありがたいです。
本当に申し訳ありません

補足日時:2005/12/05 10:12
    • good
    • 0

桁下げといっても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です。
    • good
    • 0

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) 先生がおっしゃってる意味理解できますか?先生に質問してもちゃんと答えてくれなかったので…お忙しいところ申し訳ありませんがアドバイスお願いいたします。

補足日時:2005/12/04 11:36
    • good
    • 0

10進と同じですよ。


「10」進では上の位から1を持ってくると、下の桁に「+10」
「8」進では上の位から1を持ってくると、下の桁に「+8」
「16」進では上の位から1を持ってくると、下の桁に「+16」
するだけです。

わざわざ2進にする必要ありません。
    • good
    • 0

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