Binary 循环存储1s补码
假设一台计算机使用4位一的补码。忽略溢出,在以下伪代码例程终止后,变量j中将存储什么值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)
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无关。