c - 在C中简化二进制分数时的无限循环

标签 c linux binary infinite-loop fractions

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

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;
}

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

关于c - 在C中简化二进制分数时的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31174399/

相关文章:

c - 为什么我会遇到段错误(strcmp 或 fgets)?

c - 为什么编译器显示错误 "expected expression before stud"?

linux - 如何 SO_REUSEADDR | SO_REUSEPORT 在 setsockopt 中有效吗?

binary - 如何为二进制差异输出文件创建 PATCH 文件

c - 使 C 动态数组泛型

c - 增量运算符的原子性

c++ - 调用函数时出错

c - C 中的 SSL 套接字无法连接到某些站点

python - Python 中十六进制数的二进制补码

c++ - 无法将整数写入二进制文件 C++