【问题标题】:Decimal to Binary converter can't calculate decimals greater than 1023十进制到二进制转换器无法计算大于 1023 的小数
【发布时间】:2014-11-08 08:09:03
【问题描述】:

我正在编写一个将十进制转换为二进制的函数。它适用于小于 1024 的值,但我也需要它适用于 8 位数字。到目前为止我的功能:

static long int decToBin(int dec)
{
  int bit;
  int k;
  long int bin = 0;

  for (bit = 32; bit >= 0; bit--)
  {
    k = dec >> bit;

    if (k & 1)
    {
       bin += exponentiate(10, bit);
    }
  }

  return bin;
}

我对按位的东西比较陌生,所以问题出在哪里可能很明显,但我会很感激任何帮助。

编辑:我使用 C 语言编写,使用 GNU GCC 编译器。

【问题讨论】:

  • 这听起来像是学习使用调试器的绝佳机会。 ;-)
  • int32 的最大值
  • int64 的最大值
  • 将 32 位整数移位 32 是未定义的行为。另外,我相信,向右移动有符号整数是实现定义的。
  • 提示:对于位移操作,您应该更喜欢无符号类型。

标签: c binary decimal bit-manipulation


【解决方案1】:

供参考

static void decToBin(int dec)
{
  int bit;
  int k;

  for (bit = 31; bit; bit--)
  {
    k = (unsigned int)dec >> bit;
    printf("%d", (k&1)?1:0);
  }
  k = (unsigned int)dec >> bit;
  printf("%d\n", (k&1)?1:0);
  return;
}

一旦你明白这是做什么的,你就可以实现你自己的。提示:您可能需要分配存储空间(32 字节)。

【讨论】:

  • 感谢您的提示!我正在尝试阅读移位操作,我知道它是如何与常规二进制值一起工作的,但是在对其他数字进行测试时,我仍然对它的作用有些摇摆不定。我想一旦我弄清楚了,一切都会变得更有意义。
猜你喜欢
  • 2021-07-29
  • 2016-08-26
  • 1970-01-01
  • 2019-09-22
  • 2020-06-27
  • 1970-01-01
  • 2014-08-14
  • 2015-05-16
  • 2021-02-26
相关资源
最近更新 更多