隅歩つ

書いて理解を深める

10進数を2進数への変換方法

「プログラミング×数学」系の書籍には必ず2進数とか10進数がよく出てきますね。

プログラミングを勉強し出したころはあまり必要ではないのかなぁと思ってましたが、やっぱり必要ですよね。

2進数への変換を忘れやすいのでメモです。

関数で変換

まずは、関数で変換します。

bin()を使って10進数を2進数にします。

bin(13)
# '0b1101'

'0b1101'の最初の2文字「0b」は2進数の表記です。

16進数へ変更する場合は、hex()になります。

hex(13)
# '0xd'

16進数の場合は最初に「0x」が付きます。

変換方法

本によると、10進数を2進数へ変換する方法は「元の値を基数で繰り返し割ったときの余り」です。

具体的には、
まず、13を2(基数)で割って商が6であまりが1になる。
次に商(6)を2で割って商が3であまりが0になる。

  1. 13÷2=6・・・1
  2. 6÷2=3・・・0
  3. 3÷2=1・・・1
  4. 1÷2=0・・・1

以上のようになります。

これを後ろから(上の場合だと4→1)に並べると答えになります。

Pythonで変換(1)

Pythonで変換してみました。

N = 13
r = []

while N!=0:
    a = N % 2
    N = N // 2
    r.append(a)

r.reverse()
s = "".join(str(i) for i in r)

print(s)
# 1101

ちょっとごちゃごちゃしていますね。

Pythonで変換(2)

書籍には以下の方法が書いてあることが多いです。

2で割るところを、2の位の乗で割っています。

N = 13
for i in [3, 2, 1, 0]:
    k = 2**i
    print((N // k) % 2, end="")
# 1101

この(2)の方法はあまりピンときていないです。
何度か試してみて徐々に慣れていきたいと思います。