NW屋的日常徒然日記

ネットワークを専門にする元社内SEの日常とITネタ諸々を綴って行きます。

医療情報技師が狙う基本情報技術者試験・〜2進数に馴染もう(2)〜

  こんばんは。今日あたりに秋の情報処理技術者試験受験票が届いた方々も多いかと思います。そろそろ臨戦モードに入っておられる方も多いでしょうね。

 ということで、今回はお約束通り2進数に馴染もう(2)で行きたいと思います。2進数に関しての基礎的な話は前回しました。補数と掛け算・割り算あたりの話をする予定にしてます。

 引き算も足し算で行う

 10進数で引き算をする場合は特に意識せずに計算しますよね。たとえば、1000-323はいくつか?の答えは簡単ですね。677ですね。0から3は引けないので、10の位から1かりて来て10-3=7が1の位になりますよね。で、10の位は1借りられたので、100の位から1借りてきた分から1減るので9になりますよね。9-2=7が10の位の値になりますね。100の位は0ですが、10の位から1借りられたので9になります。9-3=6が100の位になりますね。で、1000の位はずっと引っ張られる形で借りられてしまったので0ですね。(^^;;

 なので、1000-323=677になるということですね。(この後にこの話がもう一度出てきます)

 10進数の場合は上記のような計算を普通にしますね。2進数の場合は引き算も足し算で行います。と言うと、「え?引き算も足し算で?」と思われる方もおられるかもしれません。この場合、(2の)補数という概念を使います。13-7を10進数で計算すると6ですよね。これを2進数で表すと、1101-0111という風になります。10進数のように「上の桁から1借りてきて…」みたいなことはしませんし、出来ませんw

 で、どうするかというと、引く方の数0111のビットを反転して1を足します。まず反転すると、1000になりますね。これに1を足すと1001になります。実際に足してみましょう。

  1101

+1001

---------

10110

 となりますね。元々4桁での表現なので、ここで一番左の桁は溢れとなります。なので、ここで16の位に相当する1はカットとなり、0110が答えになります。10進数で言うところの4+2=6になります。

 「なぜ1を足すか?」ということですが、先程の1000-323を思い出して下さい。「上の桁から1借りてくる」ということをせずに、1000から1引いて999とします。999-323としてやれば、上の桁から借りてこなくても済みますよね。答えは676になりますよね。1引きましたので、答えに1足してやると677になりますね。

 これと発想は一緒ですね。2進数の場合も1を足さないと10101になって1足りませんね。(^^;;

 2進数の場合は「上の桁から1借りてきて…」みたいなことをすると、少々面倒なことになりそうだということは想像がつきますよね。(^^;;

 掛け算・割り算は明日にでも

 そろそろ日付が変わりそうですので、ひとまず今日のところはここまでで失礼いたします。<(_ _)>

<つづく>