C++ 如何将小数数组转换为二进制数数组?
*我的数组是C++ 如何将小数数组转换为二进制数数组?,c++,c,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
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。
我还需要做什么。请帮助*如果我理解您的代码,从int=7开始,您需要int=111(100+10+1),打印时显示为0111。这是一个格式化问题,不是转换问题。请看printf()如何将前导零添加到4位。您希望它精确到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位字符串将导致函数最大值处理为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;
}
<代码> 0010 >代码>不是C++中的有效数字。然后有很多方法来做你想做的事情,这取决于你将如何使用这些二进制数
a。使用std::string(或一个c样式的char*数组)并以迭代方式完成缺少的0。您必须首先将数字转换为字符串标记(可能使用boost::lexical_cast或简单地使用istringstream),将它们转换为std::string,然后执行以下操作:for (int i=mystring.size(); i<4; i++) mysting.push_front("0");
<代码> >(int i=ySyth.siz),i p>它取决于您使用的是C<代码> Print For(<代码> >函数或C++ + IoSoalsOuts.< /P>
#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;
}
#包括//printf()
#包括//cout,endl
#包括//setw(),setfill()
内部主(空)
{
双常数d=10;
printf(“%04.0f\n”,d);
std::cout计算机中的所有内容都已经是二进制格式,因此不需要转换任何内容
这是您在屏幕上以二进制表示方式打印数字的方式:
#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);
}
#包括
#包括
无效打印箱(大小项目、常量数组[项目])
{
对于(大小i=0;i>=1)
{
printf(数组[i]和掩码?“1”:“0”);
}
printf(“\n”);
}
}
内部主(空)
{
uint8_t数组[9]={2,2,10,3,1,15,12,6,1};
打印槽(sizeof(数组)/sizeof(*数组),数组);
}
这个例子可以很容易地修改,以创建特殊的“BCD ish”array2
,而不是打印。如果您想要二进制数的文本表示,那么为什么要返回一个double
而不是std::string
?您正在“转换”将一个数字转换为另一个数字,当以十进制形式写入时,该数字包含的数字与以二进制形式写入时原始数字包含的数字相同。也就是说,您正在“转换”二乘十,七乘一百一十一。如果需要一个数字序列,请使用数组或其他集合。从启用编译器警告开始。返回一个double
,严重吗?发布编译的实际代码。