2の補数のソースを表示
←
2の補数
移動先:
案内
、
検索
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
'''2の補数'''(にのほすう)は、2、ないし2のべき乗の[[補数]]、またそれによる負の値の表現法である。特に[[二進法]]で使われる。(数学的あるいは理論的には、三進法における減基数による補数、すなわち 3<sup>n</sup> − 1 = 2222....2222<sub>(三進)</sub> による補数も「2の補数」であるが、まず使われることはない) [[コンピュータ]]の固定長[[整数型]]や、[[固定小数点数]]で、負の値を表現するためや[[加算器]]で減算をするために使われる。 頭の部分の1個以上の0を含む(正規化されていない)ある桁数の二進法で表現された数があるとき、その最上位ビット (MSB) よりひとつ上のビットが1で、残りが全て0であるような値(8ビットの整数であれば、100000000<sub>(二進)</sub> = 256)から、元の数を引いた数が'''2の補数'''である。MSBの重みが1であるような固定小数点表現の場合は特に「2」の補数となる。 == 例 == −36([[十進法]])が、8ビットで、2の補数でどのように表されるかを例として示す。 二進法8ビットで、36は 00100100 である。 100000000 (256) -) 00100100 (36) ------------ 11011100 (220) したがって、'''2の補数'''による−36の表現は 11011100 (十進表現で220)である。 元の数 (00100100) と求められた (11011100) の2つの数を足し合わせると、すべての桁が 0 になり、負数が求められていることがわかる(最上位桁からの桁上がりの 1 は無視する)。 === 別の求め方 === 「1の補数に1を加える」という方法もある。算術的に考えると、(たとえばこの例の場合)「256 − 36」という計算を「(255 − 36) + 1」に分解している。 まず 00100100 の各ビットを反転させる(1の補数を求める)と、 11011011 次に1を加えると、 11011011 +) 1 ----------- 11011100 得られた値は、上記の値と同じことが分かる。 == 1の補数 == 二進法における、減基数すなわち 2<sup>n</sup> − 1 による補数を'''1の補数'''と言う。1の補数は、全ての桁が1である値から、元の値を引けば求まるが、各ビットの1を0に、0を1に、と反転させても求められる。 00100100(元の数) 11011011(1の補数) 11011100(2の補数) == 負の数の値 == 2の補数で表現された負の数の値を考えるには、二進法の各桁の重みについて、最上位ビット (MSB) のみ符号が反転したものとして計算すれば良い。 たとえば 1101<sub>2</sub> は、符号無しの二進法であれば、2<sup>3</sup> + 2<sup>2</sup> + 2<sup>0</sup> = 8 + 4 + 1 = 13 であるが、2の補数表現による負の数であるとした場合は、'''−2<sup>3</sup>''' + 2<sup>2</sup> + 2<sup>0</sup> = '''−8''' + 4 + 1 = −3 である。 1111 1111 1111 0001<sub>2</sub> のような、上位側に1が並んだ数の場合も同様にして求めてもよいが、正の数の時に、上位側の0を無視するように、1が連続する間は無視し、最後の1の重みを負として、そこから下位の桁について同様に計算してもよい。 1111 1111 1111 0001<sub>2</sub> の場合、−16 + 1 で、−15 である。 == 十進法との対応 == {| class="wikitable" style="text-align:right" |- ! 十進表記 !! 4ビット整数表記 |- | −8 || 1000 |- | −7 || 1001 |- | −6 || 1010 |- | −5 || 1011 |- | −4 || 1100 |- | −3 || 1101 |- | −2 || 1110 |- | −1 || 1111 |- | 0 || 0000 |- | 1 || 0001 |- | 2 || 0010 |- | 3 || 0011 |- | 4 || 0100 |- | 5 || 0101 |- | 6 || 0110 |- | 7 || 0111 |} <!--↓2進法において、「a XOR (a ± 1) を計算する」という、より一般的な手法の応用ないし変形に過ぎません。キモは加算器の高速桁上げにあり、2の補数表現によってもたらされる恩恵であると考えるには無理があります。--><!-- == テクニック == === ビットの立っている最下位ビットだけを残して残りを0にする方法 === 2の補数では、ビットの立っている最下位ビットだけを残して残りのビットを0にするには、[[C言語]]で x & -x により、可能である。例えば、14 & -14 は 2 となる。 00001110 14 &) 11110010 -14 ------------ 00000010 2 --> [[Category:コンピュータの算術|にのほすう]] [[Category:コンピュータのデータ|にのほすう]] [[Category:プログラミング|にのほすう]] [[Category:数学に関する記事|/2にのほすう]]
2の補数
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
新しいページ
最近の更新
おまかせ表示
sandbox
commonsupload
ヘルプ
ヘルプ
井戸端
notice
bugreportspage
sitesupport
ウィキペディアに関するお問い合わせ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報