1の補数

読み:いちのほすう
外語:one's complement 英語
品詞:名詞

2進数における負の数の表わし方の一つで、すべてのビットを反転させたもののこと。つまり、正数表現に対し、単純に論理否定を取ったものである。

目次

ネットワークチェックサムと呼ばれる、IPTCPUDPを始めとする各種プロトコルのチェックサム計算用に使われている。

IP、TCP、UDPは「1の補数和の1の補数」が使われている。

ここで2の補数でなく1の補数なのは、バイトオーダーを気にせず計算できる利点があるためで、後者で最後に結果を否定して1の補数にしているのは、パケット全体を1の補数和した時に結果が0になり計算しやすいからである。

マイナス1

例えば−1を例にする。16進数4桁で+1は0x0001なので、これを論理否定すると0xFFFEとなる。

つまり1の補数の世界では0xFFFEが−1を意味することになる。

マイナス0

1の補数の世界では、+0の否定として−0が存在する点も重要である。

16進数4桁で0は0x0000なので、これを否定すると0xFFFFとなる。+0も−0も同じ値と考えれば、0の表現に0x0000と0xFFFFの二つが存在するということになる。

計算する場合の盲点となりがちなので注意が必要である。

1の補数和

1の補数の加算は1の補数和と呼ばれ、左の桁への桁上がりを一番右に足し込むことで行なう。

一例として0xFFFFと0x1234の和(1の補数和)を考える。0xFFFF+0x1234→0x11233となるが、16ビットを超えた部分を右側に加算するので、結果は0x1234となり、元と値は変わらない。なぜなら1の補数の世界では0xFFFFは0を意味するからである。

1の補数の世界では−2(0xFFFD)、−1(0xFFFE)、−0(0xFFFF)、+0(0x0000)、+1(0x0001)、+2(0x0002)…のようになるため、0xFFFFに1足して桁上がりした場合、0x0000(つまり+0)を経由する必要はなく、0x0001になるべきである。そのために、桁上がりの桁を右側に足し込むことになる。

用語の所属
補数
関連する用語
1
2進数
2の補数

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club