Pythonで2の補数を表示しよう

Pythonを使って2の補数で表現された2進数を表示しましょう。

プログラムは正の数の表示から順に行います。

変換する数値を入力して、数値を変換する手順を確認してみましょう。

アクティビティの準備

アクティビティを始める前に次の準備を行いましょう。

  • 1. Google Colabを開きましょう。

    次の「Google Colab」ボタンを押して「Google Colab」にアクセスしましょう。

  • 2. 新しいノートブックを作成し、名前を「IP01-03」と付けましょう

準備ができたらアクティビティに進みましょう。

ステップ1 正の数を8ビットの2進数に変換してみよう

STEP1では、入力した10進数を8ビットの2進数を表示します。

入力する数字は正の数のみです。

次のプログラムをGoogle Colabに貼り付けてください。

# 正の数を8ビットの2進数で表示する

# ここに自分の好きな正の数を入れてください(例:10)
value = 
n = 8  # ビット数

# 8ビットで表す
bin_str = bin(value)[2:].zfill(n)
print("2進数表現:", bin_str)
    

プログラムの4行目に変換したい10進数を入力して実行します。

例えば10進数の「10」を入れる場合は、4行目を下記のようにします。

value = 10

例えば、上記のように4行目に「10」を入れると「00001010」と表示されれば上手くできています。

10進数の数値を設定してプログラム実行し、表示された2進数を答えましょう。

ただし、8ビットの正の整数なので0~127までの数値を指定してください。

提出は「10」以外の2つの適当な数値を入れた結果を答えましょう。

1回目:4行目に入力した10進数の値

1回目:表示された2進数

2回目:4行目に入力した10進数の値

2回目:表示された2進数

ステップ2 負の数を2の補数で表そう(反転+1)

ステップ2では、2の補数を求める手順である「反転+1」の状態を確認します。

入力する数字は正の数のみです。

次のプログラムをGoogle Colabに貼り付けてください。

# 負の数を8ビットの2進数で表示する

# 自分で負の数を設定してみよう(例:-5)
value = 
n = 8  # ビット数

# 絶対値の2進数
abs_bin = bin(-value)[2:].zfill(n)
print("① 入力した値の2進数:", abs_bin)

# 反転
inverted = ''
for b in abs_bin:
    inverted += '1' if b == '0' else '0'
print("② 桁(ビット)反転:", inverted)

# +1して2の補数を完成
plus1 = bin(int(inverted, 2) + 1)[2:].zfill(n)
print("③ +1した2の補数表現:", plus1)

プログラムの4行目に変換したい負の値を10進数で入力して実行します。

例えば、「-5」を入れると

① 入力した値の2進数: 00000101

② 桁(ビット)反転: 11111010

③ +1した2の補数表現: 11111011

と表示されれば上手くできています。

負の10進数を設定して表示された値を答えましょう。

ただし、8ビットの負の整数なので-128までの数値を指定してください。

提出は「-5」以外の2つの適当な数値を入れた結果を答えましょう。

1回目:4行目に入力した10進数の値

1回目:③で表示された2進数

2回目:4行目に入力した10進数の値

2回目:③で表示された2進数

ステップ3 クイズにチャレンジ!2の補数を自分で求めてみよう

ステップ3では、2の補数の計算をゲーム感覚で解くプログラムです。

入力する数字は2進数です。

コンピュータが10進数の値を出題しますので、2進数の値を8桁(ビット)で答えましょう。

次のプログラムをGoogle Colabに貼り付けてください。

# 負の数を8ビットの2進数で表示する

import random

# ビット数の設定
n = 8

# 出題する整数をランダムに生成(-128〜-1)
val = random.randint(-128, -1)
print("この数の2の補数は? →", val)
print(f"{n}ビットで入力してください。(例:{val} が -5 のとき 11111011)")

# 学生からの回答を input() で受け取る
ans = input("あなたの答え(2進数ビット列)を入力してください:").strip()

# 正解のビット列を計算(反転+1で求める)
if val >= 0:
    correct = bin(val)[2:].zfill(n)
else:
    abs_bin = bin(-val)[2:].zfill(n)
    inv = ''.join(['1' if b == '0' else '0' for b in abs_bin])
    correct = bin(int(inv, 2) + 1)[2:].zfill(n)

# 結果表示
if ans == correct:
    print("🎉 正解です!")
else:
    print("❌ 残念…")
    print("正しい答えは:", correct)
    

クイズ形式のプログラムを実行してみて、感想やもっとプログラムを面白くするアイデアなど意見を入力してください。(任意)

最大 500 文字

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる