我在上一门计算机系统课程,在某种程度上,我一直在为“二的补充”而挣扎。我想了解它,但我所读到的一切并没有让我明白它的含义。我读过维基百科的文章和其他各种文章,包括我的课本。
什么是2的补数,我们如何使用它,它如何在强制转换(从有符号到无符号,反之亦然)、逐位操作和位移位操作等操作中影响数字?
我在上一门计算机系统课程,在某种程度上,我一直在为“二的补充”而挣扎。我想了解它,但我所读到的一切并没有让我明白它的含义。我读过维基百科的文章和其他各种文章,包括我的课本。
什么是2的补数,我们如何使用它,它如何在强制转换(从有符号到无符号,反之亦然)、逐位操作和位移位操作等操作中影响数字?
当前回答
2的补码是表示负数的一种方式,大多数控制器和处理器都以2的补码形式存储负数。
其他回答
2对给定数的补数是1与1的补数相加得到的数。
假设我们有一个二进制数:10111001101
它的1的补位是:01000110010
它的2的补数是:01000110011
你也可以使用在线计算器来计算一个十进制数的补二表示:http://www.convertforfree.com/twos-complement-calculator/
问题是“什么是“2的补码”?”
对于那些想要从理论上理解它的人(以及我试图补充其他更实际的答案),简单的答案是:2的补码是对偶系统中不需要额外字符(如+和-)的负整数的表示。
从数学的角度来看这两个补体系统是有道理的。在ten的补语中,这个想法本质上是“隔离”差异。
示例:63 - 24 = x
我们把24的补数相加,也就是(100 - 24)实际上,我们要做的就是在方程两边加100。
现在方程是:100 + 63 - 24 = x + 100,这就是为什么我们要去掉100(或10或1000或其他)。
由于必须从一长串零中减去一个数字的不方便情况,我们使用“减基数补”系统,在十进制系统中,9的补。
当我们看到一串大的9减去一个数时,我们只需要把数字倒过来。
例如:99999 - 03275 = 96724
这就是为什么在9的补数之后加1。你可能从儿时的数学中知道,9通过“偷走”1变成了10。所以基本上就是10的补位差减去1。
在二进制中,2的补数等于10的补数,而1的补数等于9的补数。主要的区别在于,我们不是试图用10的幂来分离差异(将10、100等添加到等式中),而是试图用2的幂来分离差异。
正是因为这个原因,我们把比特位颠倒。就像小数中的被减数是一串9一样,二进制中的被减数也是一串1。
例如:111111 - 101001 = 010110
因为1链比2的幂小1,它们从差值中“偷”了1,就像小数点中的9一样。
当我们使用负二进制数时,我们实际上是在说
0000 - 0101 = x
1111-0101 = 1010
1111 + 0000 - 0101 = x + 1111
为了“分离”x,我们需要加1,因为1111离10000只有1,我们去掉前导的1,因为我们只是把它加到原始的差值上。
1111 + 1 + 0000 - 0101 = x + 1111 + 1
10000 + 0000 - 0101 = x + 10000
只要两边都去掉10000就得到x,这是基本的代数。
2的补语:当我们用一个数字的1的补语加一个额外的1时,我们将得到2的补语。例如:100101,它的1的补足是011010和2的补足是011010+1 = 011011(通过与1的补足相加) 本文以图解的方式对此进行了解释。