小编典典

什么是“ 二进制补码”?

sql

我正在上一台计算机系统课程,并且在某种程度上一直在努力与Two’s Complement交流。我想了解它,但是我读过的所有内容都没有为我带来帮助。我已经阅读了维基百科的文章以及其他各种文章,包括我的教科书。

因此,我想开始这个社区Wiki帖子,以定义Two’s Complement是什么,如何使用它以及它如何在诸如强制类型转换(从有符号到无符号,反之亦然),按位操作和移位操作等操作期间影响数字。

我希望有一个清晰简洁的定义,使程序员容易理解。


阅读 1030

收藏
2021-03-23

共1个答案

小编典典

658

二进制补码是一种存储整数的聪明方法,因此常见的数学问题很容易实现。

要理解,您必须考虑binary中的数字。

它基本上说,

对于零,请使用全0。
对于正整数,开始递增计数,最大值为2 (位数-1) -1。
对于负整数,请执行完全相同的操作,但是请切换0和1的角色(因此,与其以0000开头,不以1111开头-这是“补码”部分)。
让我们尝试使用4位的迷你字节(我们将其称为半字节-1/2字节)。

  • 0000 - zero
  • 0001 - one
  • 0010 - two
  • 0011 - three
  • 0100 to 0111 - four to seven

这是我们可以肯定的。 HN2.png

对于底片:

  • 1111 -negative one
  • 1110 -negative two
  • 1101 -negative three
  • 1100 to 1000 - negative four to negative eight

请注意,对于负数(1000= -8),您将获得一个额外的价值,而对于正数则得到一个额外的价值。这是因为0000用于零。这可以视为计算机的编号行。

区分正数和负数

这样做,第一位具有“符号”位的作用,因为它可用于区分非负十进制值和负十进制值。如果最高有效位是1,则二进制可以说是负数,而最高有效位(最左边)是0,则可以说十进制值是非负数。

“符号幅度”负数的正负号只是正负号的翻转,但是这种方法必须将解释1000(一个1后跟所有0s)解释为“负零”,这令人困惑。

“ 1的补码”负数只是其正的对应数的位补码,这也导致“负0”与1111(全1)混淆。

除非您与硬件非常接近,否则您可能不必处理Ones的补数或Sign-Magnitude整数表示形式。

2021-03-23