(Translated by https://www.hiragana.jp/)
有符號數處理 - 维基百科,自由的百科全书

ゆう符號ふごうすう處理しょり

这是ほん页的いち历史版本はんぽんゆかりWPCleaner (bot)とめげん | 贡献ざい2017ねん12月2にち (ろく) 10:13 WPCleaner v1.43b - Fixed using WP:WPCHECK (HTML格式かくしき))编辑。这可能かのうとうぜん版本はんぽん存在そんざい巨大きょだいてき异。

ざい计算つくえ运算なかゆう符号ふごうすうてき表示ひょうじ需要じゅようはた负数编码为进制形式けいしき

ざい数学すうがくなか任意にんい基数きすうてき负数ざい最前さいぜんめんじょう“−”符号ふごうらい表示ひょうじしか而在计算つくえかたけんなか数字すうじ以无符号ふごうてき进制形式けいしき表示ひょうじいん需要じゅよういち编码负号てき方法ほうほうとうぜんゆうよん种方ほうよう于扩てん二进制数字系统らい表示ひょうじゆう符号ふごうすうはら码(sign-and-magnitude),はん(ones' complement),补码(two's complement),以及うつりexcess-N

はら

8はら
进制 符號ふごう及值 无符ごう
00000000 +0 0
00000001 1 1
... ... ...
01111111 127 127
10000000 −0 128
10000001 −1 129
... ... ...
11111111 −127 255

符號ふごう及值(sign & magnitude)てき处理办法分配ぶんぱいいち个符ごう(sign bit)らい表示ひょうじ这个符号ふごう:设置这个くらい通常つうじょう最高さいこう有效ゆうこう)为0表示ひょうじいち个正すう,为1表示ひょうじいち个负すう数字すうじちゅうてき其它指示しじすう值(あるもの绝对值)。よし此一个ただゆう7除去じょきょ符号ふごう),かず值的范围从0000000(0)いた1111111(127)。这样とう增加ぞうかいち个符ごうだいはちきさき表示ひょうじ从−12710いた+12710てき数字すうじ。这种表示法ひょうじほう导致てき结果就是以有两种方式ほうしき表示ひょうじれい,00000000(0)あずか10000000(−0),這大だい增加ぞうかかず碼電てき複雜ふくざつせい設計せっけいなん。CPUまた執行しっこう兩次りょうじ比較ひかくはかためし運算うんざん結果けっかためれい

じゅう进制すう−43ようげん码方ほう编码なり八位的结果为10101011。

这种方法ほうほう直接ちょくせつ较于常用じょうようてき符号ふごう表示法ひょうじほう放置ほうちいち个“+”あるもの“−”ざい数字すうじてきすう值之まえ)。一些早期的二进制电脑(れいIBM 7090使用しよう这种表示法ひょうじほう,也许よし于它与通用つうよう用途ようとてき自然しぜん联系。はら码是さい常用じょうようてき表示ひょうじ浮點すうてき方法ほうほうIEEE二進位浮點數算術標準(IEEE 754)採用さいよう最高さいこう有效ゆうこう作為さくい符号ふごういん此可表示ひょうじ正負せいふれい及正まけ無限むげん

はん

8はん
进制值 はん表示ひょうじ 无符ごう数表示すうひょうじ
00000000 +0 0
00000001 1 1
... ... ...
01111101 125 125
01111110 126 126
01111111 127 127
10000000 −127 128
10000001 −126 129
10000010 −125 130
... ... ...
11111110 −1 254
11111111 −0 255

另一方面ほうめんいち种叫做はんまとけい统也以用于表示ひょうじ负数(ちゅう正数せいすう与原よはら码形しきいち样,无需取はん)。一个负数的二进制数反码形式为其绝对值部分按位取反(そく符号ふごう变,其余各位かくい按位はん)。どうげん表示ひょうじいち样,0てきはん表示ひょうじ形式けいしき也有やゆう两种:00000000(+0)あずか11111111(−0)。

举例らい说,はら码10101011(-43)てきはん码形しき为11010100(−43)。ゆう符号ふごうすうようはん表示ひょうじてき范围为−(2N−1−1)いた(2N−1−1),以及+/−0。传统てき表示ひょうじ为−12710いた+12710,以及00000000(+0)あるもの11111111(−0)。

对两个反码表示ひょうじ形式けいしきてき数字すうじ做加ほうしゅさき需要じゅよう进行つね规的进制加法かほうただし需要じゅようざいてきもと础上じょう进位。为什么必须这样呢?らい下面かめん这个−1じょう+2てきれい

           进制    じゅう进制
        11111110     -1
     +  00000010     +2
    ............    ...
      1 00000000      0   <-- 错误答案とうあん
               1     +1   <-- じょう进位
    ............    ...
        00000001      1   <-- せい确答あん

ざい上面うわつらてきれい子中こなか,二进制加法仅仅得到了00000000,这是いち个错误的答案とうあんただゆうとうじょう进位时才能さいのういたせい确答あん(00000001)。

はん码这种数字すうじ表示ひょうじけい通常つうじょう现在ろうしきてき计算つくえちゅうPDP-1CDC 160AUNIVAC 1100/2200系列けいれつ以及其它てき一些电脑都使用反码算术。

关于正字せいじほう(orthography)てき评述:这个けい统之所以ゆえんしょうさくはん码(ones' complement)いん为一个正值xてきはん表示ひょうじ按位x)也可以通过0てきはん码(ones' complement)表示ひょうじ形式けいしきいち长串てき1,−0)减去xいた

Internet协议IPv4ICMPUDP以及TCP使用しようどう样的16はん码检验和算法さんぽう。虽然だい多数たすう计算つくえかけすくな“循环进位”かたけんただし这种额外てき复杂せい接受せつじゅてきいん为“对于所有しょゆう(bit)位置いちじょうてき错误どう样敏かんてき”。[1] ざいUDPなかぜん0表示ひょうじ省略しょうりゃくりょう选的检验特性とくせい。另外いち表示ひょうじ:FFFF,指示しじりょう0てき检验[2]ざいIPv4ちゅう,TCPICMP强制きょうせいせい规定りょう检验,而在IPv6ちゅう以省りゃく)。

注意ちゅうい负数てきはん码只需按もとめすう值的补就以得いた符号ふごう需要じゅよう变动

补码

8补码
进制值 补码表示ひょうじ 无符ごう数表示すうひょうじ
00000000 0 0
00000001 1 1
... ... ...
01111110 126 126
01111111 127 127
10000000 −128 128
10000001 −127 129
10000010 −126 130
... ... ...
11111110 −2 254
11111111 −1 255

补码回避かいひりょう0ゆう表示ひょうじてき问题以及循环进位てき需要じゅようざい补码表示ひょうじちゅう,负数以位しき表示ひょうじ为正值的はん码加1(とうさく无符ごうすう)。

ざい补码表示ひょうじちゅうただゆういち个0(00000000)。もとめいち个数てき补(无论负数还是正数せいすう需要じゅようはん所有しょゆうしかきさき1。一对补码整数相加等价于一对无符ごうすうあいじょりょう溢出检测,如果のう够做到てき话)。如,从旁边的ひょうかく以看,127あずか−128てき补码表示ひょうじしょう就与无符ごうすう127及128そう具有ぐゆうしょうどうてき结果。

从一个正数得到其对应负数的补码的简单方法表示如下:

れい1 れい2
1. 从右边开はじめ,找到だいいち个'1' 0101001 0101100
2. はん转从这个'1'これきさき开始いたさいひだり边的所有しょゆう 1010111 1010100

うつり

うつり码,しょう二进制原码无符号整数所代表的值,减去いち个预设值。

标准うつり码,预设值为二进制原码表示的最大整数的一半。 一个数的标准移码和补码,最高さいこう相反あいはん,其余各位かくいひとししょうどう

表示ひょうじ方式ほうしき

下表かひょうれつりょう 4-bit 進數しんすうしょのう表示ひょうじてき整數せいすう

  • 符號ふごう(unsigned)表示ひょうじ0いた15
  • 符號ふごう及值(sign & magnitude)表示ひょうじ-7いた+7,包括ほうかつ-0
  • いち碼(ones' complement)表示ひょうじ-7いた+7,包括ほうかつ-0
  • 碼(two's complement)表示ひょうじ-8いた+7,ぼつゆう±0てき問題もんだい
進數しんすう 符號ふごう 符號ふごうもと いち
0000 0 0 0 0
0001 1 1 1 1
0010 2 2 2 2
0011 3 3 3 3
0100 4 4 4 4
0101 5 5 5 5
0110 6 6 6 6
0111 7 7 7 7
1000 8 -0 -7 -8
1001 9 -1 -6 -7
1010 10 -2 -5 -6
1011 11 -3 -4 -5
1100 12 -4 -3 -4
1101 13 -5 -2 -3
1110 14 -6 -1 -2
1111 15 -7 -0 -1


引用いんよう

  1. ^ Braden, R. Computing the Internet Checksum (RFC 1071). The Internet Engineering Task Force. 1988 [2009-06-11].  やめゆるがせりゃく未知みちさんすう|month=けん使用しよう|date=) (帮助)
  2. ^ Postel, J. User Datagram Protocol (RFC 768). The Internet Engineering Task Force. 1980 [2009-06-11].  やめゆるがせりゃく未知みちさんすう|month=けん使用しよう|date=) (帮助)