如何将小数组数组转换为二进制数组?

时间:2016-02-08 10:50:31

标签: c++ c

*我有的数组是

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,它给出了111代替0111。 还有什么我需要做的。请帮助*

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

一个。使用std :: string(或c-style char *数组)并迭代完成缺失的0。你必须先将你的数字转换为字符串标记(可能使用boost :: lexical_cast或只是使用istringstream),将它们放入std :: string然后执行以下操作:

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

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

℃。使用std :: bitset(http://www.cplusplus.com/reference/bitset/bitset/)你可以有std :: bites&lt; 4&gt;的数组(或std :: vector)。 - 每个用于4位二进制数 - 或直接使用std :: bites&lt; 35&gt; (在您的示例中)并确保在适当的位置自行添加缺失的0。

我绝对建议您为二进制数使用某种专用类型(std :: bites&lt; 4&gt;或char [4]或int [4]或bool [4]或自定义Struct)然后使用这种类型的数组。这样的代码更好地维护和更好地阅读。

答案 2 :(得分:0)

这取决于您是否使用C M函数或C ++ iostreams作为输出。

M[...,np.arange(w.size),:] *= w[:,None]

两个输出都是printf()

答案 3 :(得分: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&#34; array2而不是打印。

答案 4 :(得分:-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位二进制数?使用字符串

警告,将此功能转换为4位数字符串会导致函数max processinging to 1111 - &gt; 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;
}