ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

2進数の四則演算とその筆算とPython3による計算

2進法における四則演算のやり方は、単純な演算規則さえ覚えれば、それ以外では10進法におけるやり方と基本的に変わらない。

2進数の足し算

2進法における加算は次の規則に従う。

\[ \begin{align*} 0 + 0 &= 0 \\ 1 + 0 &= 1 \\ 0 + 1 &= 1 \\ 1 + 1 &= 10(上の位に1足す) \end{align*} \]

2進法では\( 1 + 1 \)で位が一つ上がり、その上の位に1足す必要があることに要注意。

\( 1101.01 + 1001.1 \)を筆算で表わすと次のようになる。上記の規則に従うことを除いては演算方法は10進法と同じ。

\[ \begin{eqnarray} &&&&1&1&0&1&.&0&1 \\ +&&&&1&0&0&1&.&1&0 \\ \hline &&&&&&&&&&1 \\ &&&&&&&&&1 \\ &&&&&&1&0 \\ &&&&&&0& \\ &&&&&1 \\ +&&&1&0 \\ \hline &&&1&0&1&1&0&.&1&1 \end{eqnarray} \]

Python3を使って答え合わせ。0bはその数が2進数であることを表わしている。小数点は計算の便宜上取り除いた。

>>> a = int('0b110101',2)
>>> b = int('0b100110',2)
>>> c = a + b
>>> bin(c)
'0b1011011'

int()函数を用いて2進数を10進数に変換して加算をしてからbin()函数を用いて2進数に戻した。

2進数の引き算

2進法における減算は次の規則に従う。

\[ \begin{align*} 0 - 0 &= 0 \\ 1 - 0 &= 1 \\ 1 - 1 &= 0 \\ 10 - 1 &= 1 (上の位から1引く)\\ \end{align*} \]

2進法では\( 0 -1 \)で位が一つ下がり、その上の位から1引く必要があることに要注意。上に位がない\( 0 - 1 \)の場合には負の数(-1)になる。

\( 1101.1 - 1001.01 \)を筆算で表わすと次のようになる。上記の規則に従うことを除いては演算方法は10進法と同じ。

\[ \begin{eqnarray} &&&1&1&0&1&.&1&0 \\ -&&&1&0&0&1&.&0&1 \\ \hline &&&&&&&&0&1 \\ &&&&&&&&0 \\ &&&&&&0 \\ &&&&&0 \\ &&&&1 \\ +&&&0 \\ \hline &&&&1&0&0&.&0&1 \end{eqnarray} \]

Python3を使って答え合わせ。0bはその数が2進数であることを表わしている。小数点は計算の便宜上取り除いた。

>>> a = int('0b110110',2)
>>> b = int('0b100101',2)
>>> c = a - b
>>> bin(c)
'0b10001'

int()函数を用いて2進数を10進数に変換してから減算してbin函数を用いて2進数に戻した。

2進数のかけ算

2進法における乗法は次の規則に従う。

\[ \begin{align*} 0 \times 0 &= 0 \\ 1 \times 0 &= 0 \\ 0 \times 1 &= 0 \\ 1 \times 1 &= 1 \\ \end{align*} \]

\( 101.1 \times 10.1 \)を筆算で表わすと次のようになる。上記の規則に従うことを除いては演算方法は10進法と同じ。両方の数に10(10進数の2)をかけて小数点を右に1桁移動させておくと計算しやすい。筆算後、その数に100(10進数では4)をかければそれが解。

\[ \begin{align*} 101.1 \times 10 &= 1011 \\ 10.1 \times 10 &= 101 \end{align*} \] \[ \begin{eqnarray} &&&&1&0&1&1 \\ \times &&&&&1&0&1 \\ \hline &&&&1&0&1&1 \\ &&&0&0&0&0\\ +&&1&0&1&1 \\ \hline &&1&1&0&1&1&1 \end{eqnarray} \] \[ \begin{eqnarray} 110111 \div 100 = 1101.11 \end{eqnarray} \]

Python3を使って答え合わせ。0bはその数が2進数であることを表わしている。小数点は計算の便宜上取り除いた。

>>> a = int('0b1011',2)
>>> b = int('0b101',2)
>>> c = a * b
>>> bin(c)
'0b110111'

int()函数を用いて2進数を10進数に変換して乗算してからbin()函数を用いて2進数に戻した。

2進数の割り算

2進法における除算は次の規則に従う。

\[ \begin{align*} 0 \div 1 = 0 \\ 1 \div 1 = 1 \end{align*} \]

\( 1010.1 \div 1.11 \)を筆算で表わすと次のようになる。その前に両方の数に100(10進法では4)を掛けて小数点を右に2桁移動させておくと計算しやすい。

\[ \begin{eqnarray} 1010.1 \times 100 = 101010 \\ 1.11 \times 100 = 111 \end{eqnarray} \] \[ \begin{eqnarray} 110 \\ 111 ) \overline{101010} \\ \underline{-111} \hspace{1em} \\ 0111 \hspace{0.6em} \\ \underline{-1110} \\ 0000 \hspace{0.1em} \end{eqnarray} \]

Python3を使って答え合わせ。0bはその数が2進数であることを表わしている。小数点は計算の便宜上取り除いた。

>>> a = int('0b101010',2)
>>> b = int('0b111',2)
>>> c = a / b
>>> bin(int(c))
'0b110'

int()函数を用いて2進数を10進数に変換して乗算してからbin()函数を用いて2進数に戻した。

割り算の結果は浮動小数点数になるのでint()函数で整数に戻してやる必要がある。そうしないとbin()函数を用いて2進数に戻すときに型エラーが生じてしまうので要注意。

関連記事

コメント

このブログの人気の投稿

LATEXで数式:指数と順列などで使う添数・添字

10の補数と9の補数と2の補数と1の補数

Visual Studio 2019にはC++のためのフォームデザイナーがない件