2進数の補数を変換する。(n進数の歩数を計算する)~Webツール便利帳

Last Updated on 2024年9月1日 by らくろぐ

Webツール第3弾。プログラムを勉強する上ででつまづきやすい負の表現(2の補数)について、考え方と変換ツールをまとめて紹介します。

負の数を表現する方法・2の補数

正の整数と負の整数について

ある正の整数に対して、その負の整数はどのような関係になるのでしょうか。数学の学問的な位置づけは説明できませんが、自分自身として以下のように理解しています。

-500は 0を中心として負の方向に500進んだもの。

従って、500ー500は足し合わせると 0 になる。

まずこの関係性が基本と考えています。

2進数で負の整数を表現するには

では、次は2進数で考えてみましょう。

は2進数で 0101 と表現しますね。では2進数でー5はどうやって表現するのでしょうか?

先ほどの考えをもとにすると、5と -5は 0になります。

0101と足し合わせて0になる2進数があれば負の表現ができることになりますね。

仮に、0101(5)を反転させてみると1010となります。両者を合わせてみましょう。

0101+1010=1111 →最上位ビットを符号付きと考えると -7となってしまいます。これでは0になりません。

0になるためにはさらに1を加えることが必要です。

つまり、1111+1→ 1 0000  最上位ビットは符号となり、下位4ビットが0すなわちこれは桁上りが発生し、合わせて0となりました。

このことから2の補数は以下のようなルールと言えます。

2進数-5は、5を反転させ、1を加えたもの

5 → 0101

5 → 1010 + 1→1011

これでー5が表現できました。

2の補数のまとめ

前述の方法を再度まとめましょう。

2の補数

負の正数を2進数に変換するとは、その負の整数の符号を反転した整数に対して「足し合わせた時に 0 になるために」1を加算することになります。

この結果が正数の2進数に対する「2の補数」と表現します。

  • 整数を2進数に変換する
  • 各桁の 0 と 1 を反転する
  • 反転後の2進数に 1 を足す

これで2進数の補数(正の整数の負の値)を表現できました。

2進数の補数を計算するツール

2進数の補数の概念が整理できたところで、2進数の補数を変換するツールを作りました。入力した数値を正の整数(2進数)を2の補数に変換してくれるツールです。

2進数の補数変換ツール
桁数の設定

補数を出す2進数を入力してください


変換の実行

WordPressにJavascriptを組み込むのは同じ手法

こちらもこれまでと同様、この変換処理部分もJavascriptを使用しました。wordpressでJavascriptを取り込む手法は以下の記事を参照ください。

機能の実装

基本の考え方

本ツールは以下の手順で実行しています。

  • チェックボックスで選択した桁数を確認する。
  • 入力した2進数を10進数に変換する
  • 桁数の最大値を計算する(0xffや0xffffや0xffffffff)
    • 2のべき乗はMath.pow()で算出
  • 最大値ー入力した数値ー1 で補数を算出
  • これを2進数に変換

入力データを変換してセルに表示しなおす(update)関数等はこれまでの資源を使います。

以下の記事でも紹介しています。

2の補数の考え方と変換ツールについて、まとめ

プログラミング学習でつまづきやすい負の整数の表現の仕方について、2の補数を使って説明ました。またこの考え方をもとに、2の補数に変換してくれるツールを作成しました。

今回のツールは入力、出力ともに2進数ですが、10進数で負の数に変換するバージョンなどもう少しいろいろと便利なものも紹介していく予定です。

小数点での表現方法など、このあたりもまた調べて紹介できればと思っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA