ニャオニャオ21世紀

レトロゲーム(MSX、PCエンジン、セガサターン)と、MSXぽいアプリ開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハックほか雑記を綴っています

MSXマシン語入門(Z80 アセンブラ・機械語) 第28回 2進数でマイナスの値。2の補数 勉強レポート






2進数でマイナスの値を表すのはどうすればいいのか?

今回は負の値について書きます。

本当は、2進数のことについて書いた時の書くべきでした(~~;

申し訳ないです。

 

 

10進数から2進数への変換は分かると思います。

25 --->  00011001

となります。

 

まぁ計算をわざわざするのも面倒なので、ツールとかでパッとやってしまいます。

2進数、8進数、10進数、16進数相互変換ツール

 

計算を電卓でやるのと同じですね^^

 

変換の仕方は、このようにします。

MSX マシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第2回 2進数 - ニャオニャオ21世紀

 

 

この第2回では、2進数でマイナスの値を書いていませんでした。

例えば、10進数で、-25というのを、2進数で表す方法です。

 

それには

2の補数というのを使います。

10進数  25    ---> 2進数  00011001

10進数 -25   ---->2進数  11100111

 

違いがわかりますでしょうか?

説明します。

 

負の値の場合は、

例えば-25の時、

プラスの25をマイナスの25に直す感じでやります。

 

2進数の負の値の場合、

まず先頭1ビットを、1にします。

25を例にやってみます。

10進数  25     00011001

                             ↓

      10011001(先頭1ビットを1に)

 

2進数の先頭ビットが1の時は、負の値。

しかし、符号ありとか、2の補数でって書いてある時だけ負の値です。

 

通常の時は、先頭ビットが1であっても負の値ではないのです。

ややこしいです〜。

そうでないと、通常時の、11111111  ->    255 という値が表現できません。

 

先頭1ビットを1にしたあと、

残りの各ビットを反転します。

0 なら 1、

1 なら 0 へ。

 

10進数  25     00011001

                             ↓

      10011001 (先頭1ビットを1に)

                             ↓

      11100110 (残りのビットを反転)

 

 

 最後に最終ビットに1を足します。

10進数  25     00011001

                             ↓

      10011001 (先頭1ビットを1に)

                             ↓

      11100110 (残りのビットを反転)

                             ↓

      11100111 (最終ビットに1を足す)

 

やることが多いですねw

2の補数表現を使った場合8ビットだと、-128 ~ 127 が表現できます。

使わないと8ビットは、0 ~ 255 の表現ですので、

同じ8ビットでも扱う数字が変わってきてしまいます。

ここは要チェックです!

 

 

マシン語で、演算の引き算をしたときに、

負の値になることがあると思いますが、

そのとき、2の補数を使った値になります。

 

演算結果が、-25のときは、11100111です。

演算結果が、正か負かは、FレジスタのSフラグでわかります。

Sフラグについてはこちらで書いています。

 

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第20回 Fレジスタの使い方 - ニャオニャオ21世紀

 

 

2の補数については、こちらの方々の説明が詳しいです。

2の補数とは?

 

この方は、より詳しく書いています。

コンピュータとマイナスの数

 

いやー奥が深いですねぇ。

> 計算結果はマイナスでも、その数を正と見るか負と見るかは、プログラム(を書く人)しだいなのです。

 

> 11111110

 

> この-2を正の数と見れば254である。正か負かは コンピュータ自身には関係ない

 

この辺りが面白いですねぇ。

1111110は、普通に見れば254。2の補数で見れば-2。

 

その値に10を足すと、

-2 + 10  (2の補数としてみれば)

または、

254 + 10 (普通の値として見れば)

 

2進数で考えると、

    11111110  (-2 または 254)

+  00001010       (10)

------------------

1  00001000        (結果)

 

8ビットだけでみれば、8ですし、(-2+10の答え)

9桁目も数えれば、264。               (254+10の答え)

 

面白い!

 

詳しくは上の方のサイトをご覧ください^^

コンピュータというのは実によく考えられています。

本当にすごい!

その仕組みを学んでいくことの面白さを感じます^^

 

 まとめ

負の値は、2の補数で表すことができます。

2の補数というのは大変興味深いということがわかりました。

もっと詳しく知りたい方は、他のサイトにもたくさん情報がありますので、

"2の補数"

で検索してみてはいかがでしょうか?

 

次回は、いつもの本で、

ビット単位のデータ操作という章をやりたいと思います。

 

 

 

 MSXマガジン 永久保存版3には、

 BIOSの一覧が載っています^^

手元に置いておくと、MSXマシン語で開発するときに役に立ちそう♪( ´▽`)

 

MSX MAGAZINE永久保存版3
MSX MAGAZINE永久保存版3
posted with amazlet at 18.09.11

アスキー
売り上げランキング: 822,871

 つづきはこちら。

www.nyaonyao21.com

 

 

 


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください