我正在尝试使用此代码简化二进制二进制分数,该代码检查值是否为偶数:

int is_even(floatlet value){
  if(value & 1) return 0;
  return 1;
}


而且,这个while循环会保持位移,直到该值是奇数。

while(is_even(numerator) && is_even(denomExp)){
  numerator >>= 1;
  denomExp <<= 1;
}


while循环进行无限循环。我想知道为什么吗?
我们已经完成测试,并且is_even函数可以正常工作。谢谢!

最佳答案

您的循环是不正确的:您也应该将demonExp右移。
它无限期地为numerator=0和偶数denomExp运行。

如果numeratordenomExp是整数类型,并且数字只是一个小数numerator/denomExp,则可以通过以下方式修复代码:

while (numerator && is_even(numerator) && is_even(denomExp)) {
    numerator >>= 1;
    denomExp >>= 1;
}


相反,如果denomExp是2除以分子的乘方,则应改为递增分子,并可能测试溢出:

while (numerator && is_even(numerator)) {
    numerator >>= 1;
    denomExp += 1;
}


您必须发布类型定义和语义以及相关的完整代码。

10-01 09:41