数字逻辑电路设计及应用(10进制转2进制)_第1页
数字逻辑电路设计及应用(10进制转2进制)_第2页
数字逻辑电路设计及应用(10进制转2进制)_第3页
数字逻辑电路设计及应用(10进制转2进制)_第4页
数字逻辑电路设计及应用(10进制转2进制)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-作者xxxx-日期xxxx数字逻辑电路设计及应用(10进制转2进制)【精品文档】数字逻辑电路设计及应用C程序设计报告(1)问题:设计一个C程序实现任意十进制数到二进制数的转换,二进制精度为11位。思路:1. 十进制数转二进制数对整数和小数的处理时不一样的。所以设计程序时,也应该对读入的整数和小数的数据分开处理。(分开的办法可以先直接对浮点数强制类型转换,即可得到整数部分,再用浮点数减整数部分,即可得到小数部分)。2. 对于整数部分,采用的是“除2法”(不知道是不是这个名字)。即,每次将该数除以2,得到的余数作为该位的二进制数,商作为下一次的除数,依此类推,直到商为1或0为止。3. 对于小数部

2、分,采用的是“乘2法”(依然不知道是不是这个名字)。即,每次将小数部分乘2,得到的整数部分即为该位的二进制数,小数部分为下一次的乘数。依此类推,这样做下去是一个无限不循环的小数,所以一般会要求二进制数中小数的精度,本题目要求的是11位。4. 在实际程序设计过程中,我发现了这样一个问题,当小数部分二进制码采用浮点型数据时,单独输出准确无误,但与整形的整数部分二进制码结合在一起后,最后3位总是不准确的,怀疑是在相加的过程中产生了“大数吃小数”的问题。按照一般思维,此时应提高精度,采用long double型变量,但是我采用的编译器是采用Windows C的运行库(MS C编译器)的MinGW,其对

3、printf函数不支持long double型。无奈之下,我只能把小数部分存为一个11位长的数组,再对其输出。流程:程序:/*/* this is a program to transform decimal nubers to binary nubers./* Huang Bohao/*2013.3.8:/*将小数部分用数组形式存储,避免了整数部分与小数部分相加而出现的/*大数吃小数的情况*/#include int Integer2Binary(int integer); /将十进制整数转换为二进制数的函数void Fraction2Binary(double fraction, int

4、BinaryFraction11); /将十进制小数转化为二进制数的函数void main()int i,integer,BinaryInt,BinaryFraction11; /待转化数据的整数部分以及转化完成的二进制数float x,fraction; /待转化数据和带转化数据的小数部分printf(please input the decimal number you want to transformn);scanf(%f,&x);integer = (int)x;fraction = x - integer;BinaryInt = Integer2Binary(integer);Fr

5、action2Binary(fraction,BinaryFraction);printf(the binary number of integer part is %dn,BinaryInt);printf(the binary number of fraction part is );for(i = 0; i 11; i+) printf(%d,BinaryFractioni); printf(n);printf(the binary number is %d.,BinaryInt);for(i = 0; i 11; i+) printf(%d,BinaryFractioni); prin

6、tf(n);/*/* function name: Integer2Binary/* input parameter: int integer (integer waiting to be transformed)/* output parameter: int output (transformed integer)*/int Integer2Binary(int integer) int B,Y,output,flag; /B被除数,Y为余数,output为输出数据,flag为位置标记位 B = integer; flag = 1; output = 0; while(1) Y = B%2

7、; /求得余数 B = B/2; /求得下一次的被除数 output += Y*flag; flag *= 10; if(B = 0)break; return(output);/*/* function name: Fraction2Binary/* input parameter: double fraction (fraction waiting to be transformed), int BinaryFraction11/* output parameter: float output (transformed integer)*/void Fraction2Binary(double fraction, int BinaryFraction11) int i,C; /C为乘数 double output = 0; double flag = 0.1; for(i = 0; i 11; i+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论