Binary 循环存储1s补码

Binary 循环存储1s补码,binary,Binary,假设一台计算机使用4位一的补码。忽略溢出,在以下伪代码例程终止后,变量j中将存储什么值 0 → j // Store 0 in j -3 → k // Store -3 in k while k ≠ 0 j = j + 1 k = k - 1 end while ''' 我原以为这种循环会永远持续下去,但书后面的答案是: J (Binary) K (Binary) 0 0000 -3 1100 1 0001 -4 1011 (1100 + 1110)

假设一台计算机使用4位一的补码。忽略溢出,在以下伪代码例程终止后,变量j中将存储什么值

0 → j // Store 0 in j
-3 → k // Store -3 in k
while k ≠ 0
    j = j + 1 
    k = k - 1 
end while
'''

我原以为这种循环会永远持续下去,但书后面的答案是:

J (Binary) K (Binary) 
0   0000  -3   1100
1   0001  -4   1011 (1100 + 1110) (where last carry is added to sum doing 1's complement addition)
2   0010  -5   1010 (1011 + 1110)
3   0011  -6   1001 (1010 + 1110)
4   0100  -7   1000 (1001 + 1110)
5   0101   7   0111 (1000 + 1110) (This is overflow -- but you can ignore)
6   0110   6   0110
7   0111   5   0101
-7  1000   4   0100
-6  1001   3   0011
-5  1010   2   0010
-4  1011   1   0001
-3  1100   0   0000

我不明白k怎么会变成正数,j怎么会变成负数。我确实理解他们是如何得到j=0,1,2,3,4的行的。如果循环真的永远持续下去,那就意味着k永远不会被视为0。。然而,4位有一组有限的值,所以它可以永远持续下去的唯一方法是,如果k在某个点停止递减,或者在跳过0时“循环”回一个负整数。因此,要使循环停止,它必须是某个序列-1、-2、…、0(这就是为什么循环不是无限的)。另一种方式:如果0在数据类型域中(即k_bits=0000),并且减量(或增量)操作保证以序列的形式迭代所有值,那么在这样的序列循环之前,很容易达到0。j变量是有趣的观察对象,而与k无关。