为什么unsigned ++不循环

时间:2016-12-09 11:46:04

标签: c

我正在尝试使用beq,add,nand创建一个乘法程序。这段代码有效但我不明白这段代码如何退出循环,因为测试值总是自己添加。谢谢你的建议。 (我正在使用goto和label,因为我稍后会将此代码转换为mips程序集。)

unsigned mult(unsigned x, unsigned y)
{
  unsigned test = 1, ans = 0;
next:
  if ((test & x) == 0) goto skip;
  ans += y;
skip: 
  y += y;
  test += test;
  if (test != 0) goto next;
  return ans; 
}

1 个答案:

答案 0 :(得分:2)

test将翻转,然后该值将为0.

test将采用值1, 2, 4, 8, 16, 32, 64 ,.... 2147483648 , 0

代码的逻辑很有趣,

检查x的LSbit是否为1.如果是,则将y添加到答案中。

如果x的下一个LSbit会将2*y添加到答案中。

对于x的每个位为1,它将添加2^n*y,给出最终答案。