计网中的反码

计网中udp报文头部中有一项检验和,书中这么说:

发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷。得到的结果被放在UDP报文段中的检验和字段。

书中是这么算的:
?

注意到最后一次加法有溢出,它要被回卷。
反码运算就是将所有的0换成1,所有的1转换成0。因此,该和0100101011000010的反码运算结果是1011010100111101

这个“反码”和我们理解的反码不太一样,我们理解的反码是:
原码为正的数不变,原码为负的数除了符号位其他取反。
在书中他把所有的数都取了反,其实这里是因为翻译问题。

one’s complement该单词直译为一的补数,这样理解就会十份直观,这个词的意思就是不管正负都按位取反,但在中文资料里将其等价为了反码(ones’ complement system or ones’ complement arithmetic)(一补数系统或算数一的补数),意思是负数用1补数来表示,而正数保持原样,这是规定。因此而书本上明显是混淆了这两个概念,导致了理解的困难

这里的反码叫做二进制反码
定义:将一个二进制数中的1变为0、0变为1以后所得的数。例如,1101010的反码为0010101。
这种反码无视正负号