按关键词阅读: 逻辑 数字 进制 进制转 10 应用 电路设计
1、数字逻辑电路设计及应用 C程序设计报告(1) 问题: 设计一个C程序实现任意十进制数到二进制数的转换 , 二进制精度为11位 。
思路: 1. 十进制数转二进制数对整数和小数的处理时不一样的 。
所以设计程序时 , 也应该对读入的整数和小数的数据分开处理 。
(分开的办法可以先直接对浮点数强制类型转换 , 即可得到整数部分 , 再用浮点数减整数部分 , 即可得到小数部分) 。
2. 对于整数部分 , 采用的是“除2法”(不知道是不是这个名字) 。
即 , 每次将该数除以2 , 得到的余数作为该位的二进制数 , 商作为下一次的除数 , 依此类推 , 直到商为1或0为止 。
3. 对于小数部分 , 采用的是“乘2法”(依然不知道是不是这个名字) 。
即 , 每次将小数部 。
2、分乘2 , 得到的整数部分即为该位的二进制数 , 小数部分为下一次的乘数 。
依此类推 , 这样做下去是一个无限不循环的小数 , 所以一般会要求二进制数中小数的精度 , 本题目要求的是11位 。
4. 在实际程序设计过程中 , 我发现了这样一个问题 , 当小数部分二进制码采用浮点型数据时 , 单独输出准确无误 , 但与整形的整数部分二进制码结合在一起后 , 最后3位总是不准确的 , 怀疑是在相加的过程中产生了“大数吃小数”的问题 。
按照一般思维 , 此时应提高精度 , 采用long double型变量 , 但是我采用的编译器是采用Windows C的运行库(MS C编译器)的MinGW , 其对printf函数不支持long double型 。
无奈之下 , 我只能把 。
3、小数部分存为一个11位长的数组 , 再对其输出 。
流程: . . 程序: /* /* this is a program to transform decimal nubers to binary nubers. /* Huang Bohao /* 2013.3.1 /*2013.3.8: /*将小数部分用数组形式存储 , 避免了整数部分与小数部分相加而出现的 /*大数吃小数的情况 */ #include int Integer2Binary(int integer);
/将十进制整数转换为二进制数的函数 void Fraction2Binary(double fraction, int Binary 。
4、Fraction11);
/将十进制小数转化为二进制数的函数 . . 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(integ 。
5、er);
Fraction2Binary(fraction,BinaryFraction);
printf(he binary number of integer part is %dn,BinaryInt);
printf(he binary number of fraction part is );
for(i = 0;
i 11;
i+) printf(%d,BinaryFractioni);
printf();
printf(he binary number is %d.,BinaryInt);
for(i = 0;
i 11;
i+) printf(%d,BinaryFraction 。
6、i);
printf();
/* /* 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;
whi 。
【数字|数字逻辑电路设计及应用10进制转2进制】7、le(1) Y = B%2;
/求得余数 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+) C = (fraction*2) / 1;
/求得乘数 fraction = (fraction*2) - (int)(fraction*2);
/下一次计算的乘数 BinaryFractioni = C;
运行结果: 输入十进制数13.76 输入十进制数123.456 . . . 。
来源:(未知)
【学习资料】网址:/a/2021/0320/0021735467.html
标题:数字|数字逻辑电路设计及应用10进制转2进制