【发布时间】:2010-11-06 04:33:10
【问题描述】:
我正在学习计算机系统课程,并且一直在努力,部分原因是 Two's Complement。我想理解它,但我读过的所有内容并没有为我带来图片。我已经阅读了wikipedia article 和其他各种文章,包括my text book。
因此,我想开始这篇社区 wiki 帖子,以定义什么是二进制补码、如何使用它以及它如何在强制转换等操作期间影响数字(从有符号到无符号,反之亦然) , 按位运算和位移运算。
我希望的是一个清晰简洁的定义,程序员很容易理解。
【问题讨论】:
-
我认为对我有帮助的评论是补码类似于逆,但它没有给出
0,而是给出2^N(根据定义),例如数字A有 3 位,我们想要A+~A=2^N所以010 + 110 = 1000 = 8是2^3。至少这澄清了“补语”这个词在这里的含义,因为它不仅仅是0和1含义的反转。有用的麻省理工学院视频:youtube.com/watch?v=RbJV-g9Lob8 -
一个快速的助记符,也是一个更清晰的混淆:就像符号幅度表示一样,二进制补码表示也有一个“符号位”。因此,要找到一个二进制补码有符号(负、零或正)数的值,只需负数计算最高有效位的符号位,然后将照常计算其余位(正数,就像在无符号编码中一样)。感谢Mr.Brayant 和Mr.O'Hallaron 撰写了令人惊叹的书“计算机系统:程序员的视角”(注意:这本书不仅仅是这个简单的示例)。
标签: binary bit-manipulation computer-science twos-complement data-representation