十进制到二进制转换器can';t计算大于1023的小数

十进制到二进制转换器can';t计算大于1023的小数,c,binary,decimal,bit-manipulation,C,Binary,Decimal,Bit Manipulation,我正在写一个将十进制转换成二进制的函数。它适用于小于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 += expone

我正在写一个将十进制转换成二进制的函数。它适用于小于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编译器。

作为参考

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字节)。

这听起来是学习使用调试器的绝佳机会。;-)int32的最大值小于10^10。int64的最大值小于10^20。将32位整数移位32是未定义的行为。另外,我相信,有符号整数的右移是实现定义的。提示:对于位移位操作,您应该更喜欢无符号类型。谢谢您的提示!我试着读懂移位运算,我知道它是如何与常规二进制值一起工作的,但是在其他数字上测试它时,我仍然对它的作用有点不确定。我想一旦我弄明白了,一切都会变得更有意义。