十进制转为二进制C++怎么做?

Fragile 2004-04-25 07:44:09
一个十进制小数,比如10.5
转为二进制小数是1010.1
这个过程用C++如何实现
转换后如果要统计这个二进制小数有几个整数位和几个小数位又应该怎么实现?
帮帮我啊。
...全文
1027 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcchunhong 2004-04-27
  • 打赏
  • 举报
回复
是啊就是象我所说的用循环移位和按位&的方法
我的表达能力很烂
请大家见谅~
szwxm 2004-04-25
  • 打赏
  • 举报
回复
//作者:王晓明 2004年4月25日(此程序没有经过反复修改)
//用于将十进制(包括浮点数,小数部分转换以后只保留四位)转换为二进制
//此程序稍作修改就可以将十进制转换为其它进制的数
//程序中使用的是字符数组,如果使用string的话将会简单很多
//希望其它朋友能将此程序改写的更简洁(当然不是上述方法)
//版权: GNU General Public License (GPL)

#include <iostream>
#include <cstdlib>
#include <cstring>

void converf1(const char * str,char * substr1,char *substr2);//用来将整数部分转换成为二进制
void converf2(double i,char * substr);//用来将小数部分转换成为二进制

int main()
{
using std::cout;
using std::cin;
char converstr[255]={'\0'},* stopstr;
double input(0.0);
char input1[255]={'\0'};
char input2[255]={'\0'};
int i(1);
do
{
cout<<"请输入要转换的十进制数(输入EXIT表示退出):";
cin>>converstr;
input=strtod(converstr,&stopstr);
if (input!=0)
{
converf1(converstr,input1,input2);
ltoa(strtol(input1,&stopstr,10),input1,2);
if (input2[0]!='\0')
{
converf2(strtod(input2,&stopstr),input2);
cout<<std::endl<<"您所输入的十制数转换为二进制以后为:"<<input1<<'.'<<input2<<std::endl<<std::endl;
continue;
}
cout<<std::endl<<"您所输入的十制数转换为二进制以后为:"<<input1<<std::endl<<std::endl;
}
else if (strcmp(converstr,"exit")==0 || strcmp(converstr,"EXIT")==0)
{
i=0;
}
else
{
cout<<std::endl<<"您输入了一个错误的值请重新输入一个十进制数。"<<std::endl<<std::endl;
}
}while(i);
return 0;
}

void converf1(const char * str,char * substr1,char * substr2)
{
bool num(true);
int i1(2);
for (int i=0;i<255;i++)
{
if (str[i]=='.')
{
substr1[i]='\0';
num=false;
continue;
}
if (num==true)
{
substr1[i]=str[i];
}
else
{
substr2[0]='0';
substr2[1]='.';
substr2[i1]=str[i];
i1++;
}
if (str[i]=='\0')
{
substr2[i1]='\0';
break;
}
}
}

void converf2(double i,char * substr)
{
static int count(0);
if (i*2>=1)
{
substr[count]='1';
i=i*2-1;
}
else
{
substr[count]='0';
i=i*2;
}
count++;
if (i!=0 && count<4)
{
converf2(i,substr);
}
if (count!=0)
{
substr[count]='\0';
count=0;
}
}
gary0451 2004-04-25
  • 打赏
  • 举报
回复
#include<iostream.h>
#define bit 1
void displayBits(int value)
{
int c,displayMask=1<<(bit*8-1);
for(c=1;c<=bit*8;c++)
{
cout<<(value&displayMask?'1':'0');
value<<=1;
if(c%8==0)
cout<<' ';
}
cout<<endl;
}
void main()
{
int i;
cin>>i;
displayBits(i);

}

gary0451 2004-04-25
  • 打赏
  • 举报
回复
你首先要知道,十进制在计算机内的存储形式也是二进制的。所以只要用位运算很好实现的。
Fragile 2004-04-25
  • 打赏
  • 举报
回复
楼上的有些看不懂
我只是想知道一下该用什么样的算法
比如说手工转的时候整数部分是除二,小数部分是乘二,然后再取0还是1这样的
那用C语言用什么算法呢?
还有1楼的朋友说的编个类,但是我觉得这样的话就太烦了,这个本来就准备放在一个类里的,再编个类的话就是类中类了。可能对于一般懂程序的人不是什么问题。但是我是一个新手菜鸟,属于大部分都不懂的问题,对于我就很困难了。要不是毕业设计里需要用到一些C++的东西,估计也不会接触到C++,以前只是粗浅的接触了一点C。
所以我想最好知道个算法。请大家帮下想想。万谢。
vcchunhong 2004-04-25
  • 打赏
  • 举报
回复
好象用&
比如说你可以用1和上面的十进制10.5相&
所得出来的结果应该就是它的二进制
不过你在操作的时候要记得循环移位`
我想是这样的`
cgsw12345 2004-04-25
  • 打赏
  • 举报
回复
这里有个现成的,你可以看看!
http://cosoft.org.cn/snippet/detail.php?type=snippet&id=4559
izdlywn 2004-04-25
  • 打赏
  • 举报
回复
可能会有现成的函数,但我不知道。
你可以查一下MSDN。

如果你光是为了实现上面的所提的功能
那你可以自己编一个类来实现,应该不是很困难,相信自己。

64,654

社区成员

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

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