2016-02-08 64 views
-1

*阵我已经是如何将十进制数组转换为二进制数的数组?

int array{9} = { 2 ,2, 10 , 3 , 1, 15, 12, 6 ,1}; 

我想,转变为二进制数组,这应该是像我使用

int array2[35]= {0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,0, 0, 1, 1, 0, 0, 0, 1}; 

代码是:

double decimal2Binary(long m) 
{ 
    int remainder; 
    long binary = 0, i = 1; 
    while(m != 0) 
    { 
     remainder = m%2; 
     m = m/2; 
     binary= binary + (remainder*i); 
     i = i*10; 
    } 
    return binary; 
} 

问题是,当我转换2为二进制时,输出为10但我希望它是0010同样地,对于7它在适当的位置0111。 什给予111否则我需要去做。请帮助*

+0

如果你想要一个二进制数字的文本表示,那你为什么要返回一个'double'而不是'std :: string'? – user2079303

+0

您正在将一个数字“转换”为另一个数字,该数字在以十进制写入时包含与以二进制写入时原始数字包含的数字相同的数字。也就是说,你将两个“转换”成十个,七个变成一百一十一个。如果您想要一个数字序列,请使用数组或其他集合。 – molbdnilo

+0

从启用编译器警告开始。返回一个'double',认真?发布编译的实际代码。 – Lundin

回答

-1

你希望它是精确的4二进制数字?

double decimal2Binary(long m) 
{ 
int remainder; 
long binary = 0, i = 1; 
while(m != 0) 
{ 
    remainder = m%2; 
    m = m/2; 
    binary= binary + (remainder*i); 
    i = i*10; 
} 
return binary; 
} 

这个功能很棒,但是正如你所知道的那样,你使用了很长时间的功能。那么你怎么能得到确切的4位二进制数?使用串

警告,在函数max处理。第这个函数转换为4位字符串结果到1111 - > 15

string decimal2Binary(long m) 
{ 
    int remainder; 
    string binary = ""; 
    while(m != 0) 
    { 
     remainder = m%2; 
     m = m/2; 
     if(remainder == 0){ 
      binary = '0' + binary; 
     } 
     else{ 
      binary = '1' + binary; 
     } 
    } 
    while(binary.size() != 4){ 
     binary = '0' + binary; 
    } 
    return binary; 
} 
0

如果我理解你的代码,从一个int = 7,你想一个int = 111(100 + 10 + 1)打印显示为0111时,这是一个格式化的问题,而不是一个转换,有查看printf()如何添加最多4位数的前导零。

0

0010是不是在C有效数字++。然后根据你将如何使用这些二进制数字,有很多方法可以做你想要的。

a。使用std :: string(或c样式char *的数组)并迭代完成缺少的0。你必须首先你的号码转换为字符串标记(也许使用boost :: lexical_cast的,或者干脆利用一个istringstream),把它们放到一个std ::字符串,然后做一些事情,如:

for (int i=mystring.size(); i<4; i++) mysting.push_front("0"); 

湾您可以使用二维数组,每个二进制数表示为int [4]。

c。使用std ::位集(http://www.cplusplus.com/reference/bitset/bitset/)你可以要么有一个阵列(或std ::矢量)的std ::咬< 4> - 每一个用于一个4位二进制数 - 或直接使用一个std ::咬< 35>(在你的例子),并确保你自己添加缺少的0。我肯定会推荐你为你的二进制数字(std :: bites < 4>或者char [4]或者int [4]或者甚至是bool [4])使用某种专用类型。或者自定义Struct),然后使用这种类型的数组。这样的代码更好地维护并更好地阅读。

0

这取决于如果您使用的输出的C printf()函数或C++输入输出流。

#include <stdio.h> // printf() 
#include <iostream> // cout, endl 
#include <iomanip> // setw(), setfill() 

int main(void) 
{ 
    double const d = 10; 

    printf("%04.0f\n", d); 
    std::cout << std::setw(4) << std::setfill('0') << d <<std::endl; 

    return 0; 
} 

对于这两个输出是0010。你的电脑里面

0

一切都已经是二进制格式,所以没有必要的东西转换。

这是你如何打印与二进制表示屏幕上的号码:

#include <stdio.h> 
#include <stdint.h> 

void print_bin (size_t items, const uint8_t array[items]) 
{ 
    for(size_t i=0; i<items; i++) 
    { 
    for(uint8_t mask=0x80; mask!=0; mask>>=1) 
    { 
     printf(array[i] & mask ? "1" : "0"); 
    } 
    printf("\n"); 
    } 
} 

int main (void) 
{ 
    uint8_t array[9] = {2, 2, 10, 3, 1, 15, 12, 6, 1}; 
    print_bin(sizeof(array)/sizeof(*array), array); 
} 

这个例子可以很容易地修改,以创建独特的“BCD-ISH” array2,而不是打印。

相关问题