Binary 2';s对给定数字的最小位进行补码

Binary 2';s对给定数字的最小位进行补码,binary,bit-manipulation,computer-science,cpu-architecture,twos-complement,Binary,Bit Manipulation,Computer Science,Cpu Architecture,Twos Complement,我想弄明白,但还是卡住了 假设我们有十进制数13(二进制中的1101)。在unsigned时,我们至少需要4位来表示它(1101原样),但在2的有符号补码中,我们是否需要5位将MSbit设置为0,因为13是正数?我知道在2的补码中,MSbit表示值(+或-)的符号。那么是01101? 此外,如果MSbit为0,则数字在单次2的补码中仍然相同,但如果为1,则为As=Au-2^n 现在让我们假设这个数字是-13。为了找出-13的二进制形式,我翻转了13的所有位(1的补码),然后加上+1(2的补码)。

我想弄明白,但还是卡住了

假设我们有十进制数13(二进制中的1101)。在unsigned时,我们至少需要4位来表示它(1101原样),但在2的有符号补码中,我们是否需要5位将MSbit设置为0,因为13是正数?我知道在2的补码中,MSbit表示值(+或-)的符号。那么是01101? 此外,如果MSbit为0,则数字在单次2的补码中仍然相同,但如果为1,则为As=Au-2^n

现在让我们假设这个数字是-13。为了找出-13的二进制形式,我翻转了13的所有位(1的补码),然后加上+1(2的补码)。所以在这种情况下,我们有:
1101-->0010+1-->0011
,但在singed 2的补码中,MSbit是0(所以它是正数),我们说“这是数字3”,或者我们可以将1作为新的MSbit,使其看起来像负数(比如11101)


谢谢:)

在2的补码中,正数有无穷多的前导零,负数有无穷多的前导零。为了允许存储在有限的空间中,表示的最左边的数字将无限地向左重复。由于数字13需要以无限多个零开头,因此其表示形式必须以零开头。因此,最短的表示形式是01101,但其他具有任意数量的零的表示形式(如00001101或0000000000001101)也同样有效

虽然可以通过翻转所有位并加1来求反一个数字,但我认为简单地从零减去更有用。如果从…00000中减去…01101,则最后一位数字将是1(带借阅),然后是1(带借阅),0(带借阅),0(带借阅)和1(带借阅)。由于要减去的值(…01101)和要减去的值(…00000)中的所有剩余数字都将为零,因此结果中的每个剩余数字都将是带借位的1

现在我们假设数字是-13。为了找出-13的二进制形式,我翻转了13的所有位(1的补码),然后加上+1(2的补码)。在这种情况下,我们有:1101--->0010+1--->0011

您没有翻转所有位,因为对数字求反意味着使用有符号表示。您将表示13的位指定为
1101b
,它是无符号的。如果它被签名,它将代表另一个数字,即
101b
+1=
110b
=6,因此为-6

您必须确保正数(如13)的MSB确实为0,正如您所显示的最小形式:
01101b
。交换这些值,您将获得
10010b
,然后添加1将产生
10011b
,在您的5位字节中,它确实表示-13


使用更常见的8位字节,负值为
11110011
,正值为
00001101
。(注意,翻转所有位并在两个方向上加1。)

是的,我明白你的意思。介意看看最新的问题吗?(另一个例子)。@DarkSysOp:添加了更多解释。