数字逻辑电路设计及应用.pdf
数字逻辑电路设计及应用
C程序设计报告(1)
[问题]:
设计一个C程序实现随意十进制数到二进制数的变换,二进制精度为11
位。
[思路]:
1.十进制数转二进制数对整数和小数的办理时不同样的。因此设计程序时,
也应当对读入的整数和小数的数据分开办理。(分开的方法能够先直接对浮点
数强迫种类变换,即可获得整数部分,再用浮点数减整数部分,即可获得小数
部分)。
2.关于整数部分,采纳的是“除2法”(不知道是否是这个名字)。即,
每次将该数除以2,获得的余数作为该位的二进制数,商作为下一次的除数,依此
类推,直到商为1或0为止。
3.关于小数部分,采纳的是“乘2法”(依旧不知道是否是这个名字)。即,
每次将小数部分乘2,获得的整数部分即为该位的二进制数,小数部分为下一次
的乘数。依此类推,这样做下去是一个无穷不循环的小数,因此一般会要求二进
制数中小数的精度,此题目要求的是11位。
4.在实质程序设计过程中,我发现了这样一个问题,当小数部分二进制码采
纳浮点型数据时,独自输出正确无误,但与整形的整数部分二进制码联合在一
起后,最后3位老是不正确的,思疑是在相加的过程中产生了“大数吃小数”的
问题。依据一般思想,此时应提升精度,采纳longdouble型变量,可是我采纳
的编译器是采纳WindowsC的运转库(MSC编译器)的MinGW,其对printf函
数不支持longdouble型。无奈之下,我只好把小数部分存为一个11位长的数组,
再对其输出。
[流程]:
[程序]:
1/4
1/4
/*****************************************************************
***/*thisisaprogramtotransformdecimalnuberstobinarynubers.
/*HuangBohao
/*将小数部分用数组形式储存,防止了整数部分与小数部分相加而出现的/*
大数吃小数的状况
*****************************************************************
***/#include
intInteger2Binary(int
integer);
,BinaryInt);
for(i=0;i11;i++)
}
/*****************************************************************
***/*functionname:Integer2Binary
/*inputparameter:intinteger(integerwaitingtobetransformed)/*output
parameter:intoutput(transformedinteger)
*****************************************************************
***/intInteger2Binary(intinteger)
{
intB,Y,output,flag;//B被除数,Y为余数,output为输出数据,flag为地点标
志位B=integer;
flag=1;