十进制到二进制转换

问题描述:

我需要使用C编程将20位十进制转换为二进制。我将创建什么缓冲区,因为它会非常大,即使计算器无法计算将20位转换为二进制。十进制到二进制转换

这里是什么,我打算完成样品:

咱们是假定这段代码: 我键入通过我的键盘这个值到缓冲区。同时,我正在使用AT85C55WD Mcu。

unsigned char idata token [20] =(2,3,5,6,3,3,4,4,3,2,4,4,6,7,4,3,4,5,3 ,3);

我想结果

类型限定可变convrt_token = 23562244324467434533;

这可能使用C吗?如果是这样,那么我该怎么办呢?

+0

尝试int数组。 –

+0

是的,谢谢iMom0。但它的方式我会去做的! –

+1

买一个新的计算器。 –

这里是高贵的解决方案.... :)

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<math.h> 
#include<unistd.h> 
#include<assert.h> 
#include<stdbool.h> 
#define max 10000 
#define RLC(num,pos) ((num << pos)|(num >> (32 - pos))) 
#define RRC(num,pos) ((num >> pos)|(num << (32 - pos))) 

void tobinstr(int value, int bitsCount, char* output) 
{ 
    int i; 
    output[bitsCount] = '\0'; 
    for (i = bitsCount - 1; i >= 0; --i, value >>= 1) 
     { 
      output[i] = (value & 1) + '0'; 
     } 
} 


    int main() 
    { 
    char s[50]; 
    tobinstr(65536,32, s); 
    printf("%s\n", s); 
    return 0; 
    } 
+0

非常感谢艾莉亚。 –

十进制每个数字有10个值,0..9。所以你需要二进制的3到4位数字。所以我们假设4保持简单。

因此对于20位十进制数,您需要一个80位二进制数字。

你可以用字符来做到这一切,以保持简单。我认为这是为了好玩。

char decnum [20]; char binnum [80];

祝你好运。

+0

我正在编辑我想要完成的示例代码的问题。 –

+0

感谢吉顿,但我不打算将每个数字转换为二进制。 –

+0

将整个20位转换为二进制将给出66位。 –

从Gidon提到的开始。然后,你只需要定义一个函数“decToBin”或类似的东西,你可以使用这样的:

char decnum[20]; 
char binnum[80]; 

// ... get the values, do zero initialization etc... 
decToBin(decnum, binnum); 

,你准备好去。
decToBin函数可以很容易地实现为一个常见的长分割算法。这应该不会太难。
玩得开心;)

编辑:详细说明:

  1. 看看你的最后一个数字。它可以被2整除吗?
    - >是:你的二进制数字为0
    - >无:您的二进制数字将是1

  2. 除以2(长除法preferrably)和截断如果必要的话,整个十进制数。

  3. 重新开始。您将以相反的顺序得到二进制数字。 (重复,直到你的十进制数为0)

+0

感谢iolo,但我并未将每一位转换为二进制。我想转换整个20位数字,这将给出一个66位二进制文​​件。 –

+0

这就是为什么你会希望你使用你在学校四年级学到的长划分算法;)。从最左边的数字开始,计算商和余数,移动到下一个数字等等。顺便说一下,它不一定会产生66位。 – iolo

+0

请参阅编辑。它现在应该更详细地解释它... – iolo