【急问!在线等】C/C++下有没有可以将10进制数据转换成二进制的函数?

hawkeyes_yq 2003-07-15 10:24:34
如题!非常感谢!
...全文
741 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawkeyes_yq 2003-07-15
  • 打赏
  • 举报
回复
To:stukov2002(卡拉是头猪)
我的小数乘2^n不一定就变成整数了啊!
cnxiaohai 2003-07-15
  • 打赏
  • 举报
回复
掌握计算原理自己写一个呀

idontlikenickname 2003-07-15
  • 打赏
  • 举报
回复


mmm...没有这样的函数~
首先说明小数的二进制表示不一定十分精确.
不过你可以试试把小数乘以2^n,将小数变成整数,然后是用这些函数,转换完毕再除以2^n.
乘以2^n就相当于左移,除以2^n相当于右移,

float fVal = 0.375; // 0.375 = 3/8;
long lVal = (long)fVal * 8; // lVal = 0.375 * 2^3 = 3;
char str[80];

ltoa(lVal, str, 2); // str内容应该是(11)b,二进制的3
// 实际对应的小数应该再右移3位,(0.011)b,
// 因为str是字符串,所以只能在输出上进行处理了~

这种方法有点类似定点计算,你可以试试~

hawkeyes_yq 2003-07-15
  • 打赏
  • 举报
回复
To:stukov2002(卡拉是头猪)
我想转的是小数,有没有类似的函数?
hawkeyes_yq 2003-07-15
  • 打赏
  • 举报
回复
To:cdocument(文档)
这个函数具体怎么用呢?
我在MSDN上查不到。
btw,我要转的十进制是小数。
idontlikenickname 2003-07-15
  • 打赏
  • 举报
回复


标准函数~
#include <stdlib.h>
char *_itoa( int value, char *string, int radix );
char *_ltoa( long value, char *string, int radix );

value - 整数值
string - 输出字符串
radix - 进制,2至36

例子:
#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char buffer[20];
int i = 3445;
long l = -344115L;
unsigned long ul = 1234567890UL;

_itoa( i, buffer, 10 );
printf( "String of integer %d (radix 10): %s\n", i, buffer );
_itoa( i, buffer, 16 );
printf( "String of integer %d (radix 16): 0x%s\n", i, buffer );
_itoa( i, buffer, 2 );
printf( "String of integer %d (radix 2): %s\n", i, buffer );

_ltoa( l, buffer, 16 );
printf( "String of long int %ld (radix 16): 0x%s\n", l,
buffer );

_ultoa( ul, buffer, 16 );
printf( "String of unsigned long %lu (radix 16): 0x%s\n", ul,
buffer );
}

Output

String of integer 3445 (radix 10): 3445
String of integer 3445 (radix 16): 0xd75
String of integer 3445 (radix 2): 110101110101
String of long int -344115 (radix 16): 0xfffabfcd
String of unsigned long 1234567890 (radix 16): 0x499602d2

zlqian 2003-07-15
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main()
{
char s[20];
int a=10;
sprintf(s,"%o",a); // o 是 8 进制 ,2 进制 自己去查
printf("%s",s);
system("pause");
return 1;
}
cdocument 2003-07-15
  • 打赏
  • 举报
回复
c++中可以将十进制的数值解输出为二进制, ofstream fout("your file name",ios::binary),即可。
cdocument 2003-07-15
  • 打赏
  • 举报
回复
void dec2bin(int *a,int *b){
int p;
b[0]=0;
while(a[0]>0){
printf("%d\n",a[0]);
b[0]++;
b[b[0]]=a[1]%2;//这里为什么要这样做
p=a[0];
while(p>0){
if (a[p]%2&&p>1)a[p-1]+=10;
a[p]/=2;
if(a[a[0]]==0) a[0]--;
p--;
}
}
}
hawkeyes_yq 2003-07-15
  • 打赏
  • 举报
回复
To: cdocument(文档)
非常感谢!!
全部送上!
To: stukov2002(卡拉是头猪)
也谢谢你!!要分的话,我另开贴给分!!
idontlikenickname 2003-07-15
  • 打赏
  • 举报
回复


是的,在计算机里小数大都不能用二进制精确的表示,除非小数是由1/(2^n)之和组成的,比如0.3333333333...就无法用二进制精确表示,但是在一定的误差范围内还是可以满足应用的,就像我们使用的float型数据一样,只能用4个字节表示,在精度上是有一定范围的~
你的这个问题也一样,比如处理0.333这样的数,你可以将它扩大2^16倍,就成了21823.488,只能对整数部分21823求二进制的值,精度损失就是0.488.你可以选择扩大的倍数来指定精度.

cdocument 2003-07-15
  • 打赏
  • 举报
回复
void printBin(unsigned long i, int bits) {//bits是你想打印的位数
while(bits-- != 0)
i & ( 1 << bits ) ? printf("1") : printf("0");
}
/////////////////////
泛型方法:
#include <iostream>
#include <stdlib.h>
using namespace std;
template <typename T>
void printBin(T i)
{
unsigned bitscount = sizeof(T);
cout << i << ": ";
unsigned char *p = reinterpret_cast<unsigned char*> (&i);
for(int i = bitscount - 1; i >= 0; i--) {
for(int j = 7; j >= 0; j--)
*(p + i) & ( 1 << j ) ? printf("1") : printf("0");
if(i != 0)
cout << ',';
}
cout << endl;
}

int main() {
char ch = 'a';
short s = 11;
int i = 12;
long l = 123456789;
double d = 14.4;
long double ld = 15.55;
printBin(ch);
printBin(s);
printBin(i);
printBin(l);
printBin(d);
printBin(ld);
system("pause");
return 0;
}

/*输出结果:
a: 01100001
11: 00000000,00001011
12: 00000000,00000000,00000000,00001100
123456789: 00000111,01011011,11001101,00010101
14.4: 01000000,00101100,11001100,11001100,11001100,11001100,11001100,11001101
15.55: 00000000,00000000,01000000,00000010,11111000,11001100,11001100,11001100,1
1001100,11001100,11010000,00000000
请按任意键继续 . . .
*/

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧