コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
Wikippe
検索
検索
表示
ログイン
個人用ツール
ログイン
二進法のソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
二進法
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
'''二進法'''(にしんほう)とは、[[2]] を[[底]](てい)とし、底およびその[[冪]]を基準にして数を表す方法である。 二進法を[[英語]]で[[バイナリ]] (binary) というが、これは二個一組や二単位を意味する[[語]]である。 == 歴史 == [[中国]]には古くから[[易]]の[[八卦]]や[[六十四卦]]があり、それぞれ 3 ビットと 6 ビットの二進数に相当している。[[易経]]の六十四卦の配列は対応する二進数 (0-63) の順になっていて、それらを 1→2→4→8→16→32→64 と進展させる「加一倍の法」を[[11世紀]]の儒学者[[邵雍]]が考案した。ただし、邵雍が二進法の計算を理解していたという証拠はない。その配列はそれぞれが二種類の値をとる要素の 6 [[タプル]]を[[辞書式順序]]に並べたものと見ることもできる。 [[インド]]の学者[[ピンガラ]] ([[:en:Pingala|Pingala]], 紀元前200年頃) は[[韻律 (韻文)|韻律]]を数学的に表現する方法を考案し、それが現在知られている最古の二進法の記述の一つとされている<ref>{{citation |last1=Sanchez |first1=Julio |last2=Canton |first2=Maria P. |title=Microcontroller programming : the microchip PIC |origyear= |year=2007 |month= |publisher=CRC Press |location=Boca Raton, Florida |isbn=0-8493-7189-9|page=37}}</ref><ref>W. S. Anglin and J. Lambek, ''The Heritage of Thales'', Springer, 1995, ISBN 0-387-94544-X</ref>。 同様の二進法的組合せの使用は、アフリカの[[ヨルバ人]]が行っていた占い [[:en:Ifá|Ifá]] にもあり、[[中世]]ヨーロッパやアフリカの[[ジオマンシー]]にも見られる。2 を底とする体系はサハラ以南のアフリカでジオマンシーに長く使われていた。 [[1605年]]、[[フランシス・ベーコン (哲学者)|フランシス・ベーコン]]はアルファベットの文字を二進数字の並びで表す体系を論じ、任意の無作為なテキストで微かに判別可能なフォントの変化に符号化できるとした。二進符号化の一般理論として彼が指摘した重要な点は、同じ方法をあらゆる物に適用できるという点であり、「2種類の異なる状態をそれらの物で表現できればよく、鐘、トランペット、光、松明、マスケット銃など同様の性質があればどんなものでもよい」とした<ref>{{citation |last=Bacon |first=Francis |authorlink=フランシス・ベーコン (哲学者) |title=The Advancement of Learning |url= http://home.hiwaay.net/~paul/bacon/advancement/book6ch1.html |accessdate= |date= |origyear=1605 |volume=6 |publisher= |location=London |language= |isbn= |doi= |doi_brokendate= |bibcode= |id= |page= |pages=Chapter 1}}</ref>。これを[[ベーコンの暗号]]と呼ぶ。 数学的に二進法を確立したのは[[17世紀]]の[[ゴットフリート・ライプニッツ]]で、"Explication de l'Arithmétique Binaire" という論文も発表している。ライプニッツは現代の二進法と同じく、1 と 0 を使って二進法を表した。ライプニッツは[[シノファイル]](親中家)でもあり、後に「易経」を知って、その六十四卦に 0 から 11111 までの二進数を対応させ、彼の賞賛してきた中国の哲学的数学の偉大な成果の証拠だとした<ref>{{citation |last=Aiton |first=Eric J. |authorlink= |title=Leibniz: A Biography |year=1985 |publisher=Taylor & Francis |location= |isbn=0-85274-470-6 |doi= |pages=245–8}}</ref>。 [[1854年]]、[[イギリス]]の数学者[[ジョージ・ブール]]は[[論理学]]の[[代数学|代数]]体系を詳述した重要な論文を発表し、それが[[ブール論理]]/[[ブール代数]]と呼ばれるようになった。その論理計算法は後にデジタル電子回路の設計に使われるようになった。 [[1937年]]、[[マサチューセッツ工科大学]]の[[クロード・シャノン]]が修士論文でブール代数と二進計算を[[継電器|リレー]]とスイッチを使った回路で実装できることを示した。"A Symbolic Analysis of Relay and Switching Circuits" と題したその論文が[[デジタル回路]]実用化の基礎を築いた。 1937年11月、[[ベル研究所]]に勤務していた[[ジョージ・スティビッツ]]がリレーを使った計算機 "Model K" を完成させた。これは二進数の加算ができる装置である。ベル研究所はこれを受け、スティビッツを中心とした正式な研究プログラムを1938年末に開始した。[[1940年]][[1月8日]]に完成した "Complex Number Computer" は[[複素数]]の計算が可能だった。1940年9月11日に[[ダートマス大学]]で開催された[[アメリカ数学会]]の会議でデモンストレーションが行われ、スティビッツは[[テレタイプ端末]]でコマンドを打ち込んで、電話回線経由で遠方にある計算機を操作して見せた。これが電話回線経由で遠隔から計算機を使った世界初の事例である。この会議に出席しデモンストレーションを目にした人物として、[[ジョン・フォン・ノイマン]]、[[ジョン・モークリー]]、[[ノーバート・ウィーナー]]らがおり、彼らはその経験について文章を残している。 == 記数法 == 2 を底とする[[位取り記数法]]を'''二進記数法'''と呼ぶ。十進法と区別するときは下付の 2 を用いて、(110)<sub>2</sub> とする。二進記数法で : <math>a_Na_{N-1}\ldots a_1a_0.a_{-1}a_{-2}\ldots</math> (各位の値 ''a''<sub>''i''</sub> は 0 か 1)と表される数は二進法の定義から、 : <math>a_N2^N + a_{N-1}2^{N-1} + \cdots + a_1 2 + a_0 + {a_{-1}\over 2} + {a_{-2}\over 2^2} + \cdots </math> という数を表している(ここで 2 は十進法の 2 である)。 二進記数法で記された数を'''二進数'''ということがある。二進数という数の体系があるわけではない。また、[[p進数]]における ''p'' = 2 の場合とは全く異なる。 二進法を用いれば 0 と 1 の二種類の[[数字]]のみで零を含む任意の[[自然数]]が表現可能であり、負号と合わせることで[[整数]]が表現可能である。更に小数点を合わせて 4 種類の記号のみで[[実数]]の表現が可能である。 <!--ここに、[[誤った二分法]]への言及と思われるものがあったが、少なくともこの節にはふさわしくない。削る。--> == 機器での使用 == [[集積回路]]などの[[デジタル回路]]、[[ハードディスクドライブ|ハードディスク]]などの[[磁気ディスク]]では、[[電圧]]の高低、[[磁極]]の N/S など、二値の[[物理学|物理]]現象を用いるため、数を二進法で表すのが最適である。[[コンピュータ]]の内部で数値を表現する場合、[[十進法]]を用いると 0 から 9 の十種類の数字に対応する十種類の内部状態を区別しなければならない。これは機構を複雑にするので、現代の[[デジタル]]コンピュータは通常は二進法を採用し、0 と 1 のみによって数値を表現している。入出力で十進法を用いるときは一般に十進法と二進法とで変換を行う。[[二進化十進表現]]を用いたり、[[IBM]] の [[POWER|POWER]] のように十進法による直接演算機能を持つコンピュータもあるが、回路としては二値を用いている。 多くの応用で見られるように[[桁]]数が有限の場合はより限定的には''[[有理数]]の部分集合''が表現されているわけであるが、通常は「''有限精度の実数''」が表現されていると解釈される。 === 機器での負の数の扱い === {{See also|符号付数値表現}} [[コンピュータ]]等で負の整数を扱う場合、広く一般的に用いられている方法は1番上位の[[ビット]](桁)を符号の用に扱い、すべてのビットが 1 のものを -1 とする方法である([[2の補数]]を参照)。-2 は最下位ビットが 0 になる。8 ビットの場合(二進で 8 桁まで扱える場合)、-1 は 11111111<sub>2</sub>、-2 は 11111110<sub>2</sub> と表現する。この方法は 11111110<sub>2</sub> + 1<sub>2</sub> = 11111111<sub>2</sub>、11111111<sub>2</sub> + 1<sub>2</sub> = 0<sub>2</sub> となり、加減乗の演算において特別な処理が不要であるという特徴を持つ。ただし、最上位ビットで繰り上がり・繰り下がりが生じた場合に 9 ビット目より上を捨てて演算することになる。また 10000000<sub>2</sub> は -128 となるが、例えば[[C言語]]では符号付char型の数は -127 から 127 の数が扱えることが保証されるのみで、-128 が扱えることは保証されず、処理系依存となる(char型が最低限 8 ビットとして、2の補数以外の負数表現の利用も考慮した仕様)。 == 十進法から二進法への変換方法 == === 正の整数 === 正の整数 m を十進法から二進法に変換するのは次のようにする。 # m を x に代入する。 # x を 2 で割って、余りを求める。 # x/2 の商を x に代入する。 # 2. に戻る。x = 0 であれば終了。 余りを求めた順の逆に並べると、それが二進法に変換された結果になる。 例:192を二進法に変換する。 2<span style="text-decoration:underline;">)192</span> 192=2<sup>0</sup>×192<br /> 2<span style="text-decoration:underline;">) 96</span>…'''0''' 192=2<sup>1</sup>× 96+2<sup>0</sup>×0<br /> 2<span style="text-decoration:underline;">) 48</span>…'''0''' 192=2<sup>2</sup>× 48+2<sup>1</sup>×0+2<sup>0</sup>×0<br /> 2<span style="text-decoration:underline;">) 24</span>…'''0''' 192=2<sup>3</sup>× 24+2<sup>2</sup>×0+2<sup>1</sup>×0+2<sup>0</sup>×0<br /> 2<span style="text-decoration:underline;">) 12</span>…'''0''' 192=2<sup>4</sup>× 12+2<sup>3</sup>×0+2<sup>2</sup>×0+2<sup>1</sup>×0+2<sup>0</sup>×0<br /> 2<span style="text-decoration:underline;">) 6</span>…'''0''' 192=2<sup>5</sup>× 6+2<sup>4</sup>×0+2<sup>3</sup>×0+2<sup>2</sup>×0+2<sup>1</sup>×0+2<sup>0</sup>×0<br /> 2<span style="text-decoration:underline;">) 3</span>…'''0''' 192=2<sup>6</sup>× 3+2<sup>5</sup>×0+2<sup>4</sup>×0+2<sup>3</sup>×0+2<sup>2</sup>×0+2<sup>1</sup>×0+2<sup>0</sup>×0<br /> 2<span style="text-decoration:underline;">) 1</span>…'''1''' 192=2<sup>7</sup>× 1+2<sup>6</sup>×1+2<sup>5</sup>×0+2<sup>4</sup>×0+2<sup>3</sup>×0+2<sup>2</sup>×0+2<sup>1</sup>×0+2<sup>0</sup>×0<br /> 0…'''1'''<br /> よって 192<sub>10</sub> = 11000000<sub>2</sub> である。 === 正で 1 未満の数 === 正で 1 未満 (0 < m < 1) である数 m を十進法から二進法に変換するのは次のようにする。 # 1 を n に、m を x に代入する。 # 2x < 1 ならば、小数点以下第 n 位は 0 になる。2x > 1 ならば、小数点以下第 n 位は 1 になる。 # 2x = 1 ならば終了。 # 2x > 1 ならば 2x - 1 を x に代入する。2x < 1 ならば 2x を x に代入する。 # n + 1 を n に代入する。 # 小数点以下の桁数が必要な桁数まで求まっているか、循環小数となったら終了する。 # 2. へ戻る。 計算の例1: 1/3 を二進法に変換する。 :{| class="wikitable" !処理!!(途中)結果 |- |<math>\begin{matrix} \frac{1}{3} \end{matrix}</math>||0. |- |<math>\begin{matrix} \frac{1}{3} \times 2 = \frac{2}{3} < 1 \end{matrix}</math>||0.0 |- |<math>\begin{matrix} \frac{2}{3} \times 2 = 1\frac{1}{3} \ge 1 \end{matrix}</math>||0.01 |- |<math>\begin{matrix} \frac{1}{3} \times 2 = \frac{2}{3} < 1 \end{matrix}</math>||0.010 |} ここで「処理」の部分の最後「<math>\begin{matrix} \frac{1}{3} \times 2 = \frac{2}{3} < 1 \end{matrix}</math>」はそれ以前に出てきた式である。このため、これ以上続けても同じ式の繰り返しで永久に終わらないことがわかる。すなわち小数部の「01」が循環することがわかるので終了する。 よって1/3<sub>10</sub>=0.010101…<sub>2</sub>=0.<span style="text-decoration:underline;">01</span><sub>2</sub> (なお、アンダーバーの部分(<span style="text-decoration:underline;">01</span>)は無限に繰り返しという意味) 計算の例 2: 十進法での 0.1 を二進法に変換する。 :{| class="wikitable" !処理!!(途中)結果 |- |'''0.1'''||0. |- |0.1×2='''0.2'''<1||0.0 |- |0.2×2='''0.4'''<1||0.00 |- |0.4×2='''0.8'''<1||0.000 |- |0.8×2='''1.6'''≥1||0.0001 |- |0.6×2='''1.2'''≥1||0.00011 |- |0.2×2='''0.4'''<1||0.000110 |- |0.4×2='''0.8'''<1||0.0001100 |} ここで「処理」の部分の最後「0.4×2 = '''0.8''' < 1」はそれ以前に出てきた式である。このため、これ以上続けても同じ式の繰り返しで永久に終わらないことがわかる。すなわち小数部の「0011」が循環することがわかるので終了する。 よって 0.1<sub>10</sub> = 0.0001100110011…<sub>2</sub> = 0.0<span style="text-decoration:underline;">0011</span><sub>2</sub> である。 == 十進法との対応 == {| class="wikitable" border="1" style="text-align:right" ! 十進表記 ! 二進表記 |- |0||0 |- |1||1 |- |2||10 |- |3||11 |- |4||100 |- |5||101 |- |6||110 |- |7||111 |- |8||1000 |- |9||1001 |- |10||1010 |- |11||1011 |- |12||1100 |- |13||1101 |- |14||1110 |- |15||1111 |} == 命数法 == '''二進命数法'''とは、2 を底とする[[命数法]]である。真の二進命数法では、2<sup>''n''</sup> に対応する[[数詞]]があり、数はそれらの和で表される。[[自然言語]]では、このような命数法は[[パプアニューギニア]]のメルパ語<ref>{{ citation | contribution=Melpa | title=Ethnologue: Languages of the World | edition=15 | url=http://www.ethnologue.com/show_language.asp?code=med | editor-last=Gordon | editor-first=Raymond G., Jr. | year=2005 | accessdate=2008-03-12 }}</ref> (Melpa) でのみ知られている<ref name="Lean">{{ citation | title=Counting Systems of Papua New Guinea and Oceania | chapter=TALLIES AND 2-CYCLE SYSTEMS | first=Glendon Angove | last=Lean | publisher=Ph.D. thesis, Papua New Guinea University of Technology | year=1992 | url=http://www.uog.ac.pg/glec/thesis/thesis.htm | chapter-url=http://www.uog.ac.pg/glec/thesis/ch2web/ch2.htm }}</ref>。 {| class="wikitable" border="1" style="text-align:center" ! style="width:2em" | !! メルパ語 |- ! 1 | tenta |- ! 2 | ralg |- ! 3 | raltika |- ! 4 | timbakaka |- ! 5 | timbakaka pamb ti |- ! 6 | timbakaka pamb ralg |- ! 7 | timbakakagul raltika |- ! 8 | engaka |- ! 9 | engaka pamb ti |- ! 10 | engaka pamb ralg pip |} 通常、二進法の[[数詞]]を持つとされるものは二つ組で数える体系であり、[[乗算]]が含まれないため、真の二進法ではない。以下にパプアニューギニアの南キワイ語<ref>{{ citation | contribution=Kiwai, Southern | title=Ethnologue: Languages of the World | edition=15 | url=http://www.ethnologue.com/show_language.asp?code=kjd | editor-last=Gordon | editor-first=Raymond G., Jr. | year=2005 | accessdate=2008-03-12 }}</ref> (Southern Kiwai) およびシッサノ語<ref>{{ citation | contribution=Sissano | title=Ethnologue: Languages of the World | edition=15 | url=http://www.ethnologue.com/show_language.asp?code=sso | editor-last=Gordon | editor-first=Raymond G., Jr. | year=2005 | accessdate=2008-03-12 }}</ref> (Sissano) の数詞を示す<ref name="Lean" />。 {| class="wikitable" border="1" style="text-align:center" ! style="width:2em" | !! 南キワイ語 !! シッサノ語 |- ! 1 | neis || puntanen |- ! 2 | netewa || eltin |- ! 3 | netewa nao || eltin puntanen |- ! 4 | netewa netewa || eltin eltin |- ! 5 | netewa netewa nao || eltin eltin puntanen |} == 参考文献 == {{reflist}} == 関連項目 == * [[位取り記数法]] * [[広義の記数法]] * [[八進法]] * [[十六進法]] * [[コンピュータの数値表現]] * [[整数型]] ** [[符号付数値表現]] *** [[2の補数]] * [[実数型]] ** [[固定小数点数]] ** [[浮動小数点数]] * [[二進化十進表現]] ** [[パック10進数]] ** [[アンパック10進数]] ** [[3増し符号]] * [[カウンタ (電子回路)]] ** [[グレイコード]] * [[2の累乗数]] * [[2進接頭辞]] * [[二進指数え法]] * [[除算 (デジタル)]] {{DEFAULTSORT:にしんほう}} {{Link FA|vi}} {{Link FA|lmo}} [[Category:数の表現]] [[Category:コンピュータの算術]] [[Category:数学に関する記事]] {{Link FA|mk}}
このページで使用されているテンプレート:
テンプレート:Citation
(
ソースを閲覧
)
テンプレート:Link FA
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:See also
(
ソースを閲覧
)
二進法
に戻る。
検索
検索
二進法のソースを表示
話題を追加