C51编程的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:30:30
一个二进制数的小数部分:1000那么它应该是10进制的0.5,如果是0100那么就应该是0.25,我现在想用C51语言让它在数码管上显示。如何解决这个问题?如果不是小数部分,可以这样做:
[temp/100]; //显示百位
[temp%100/10]; //显示十位
不好意思,小数部分我就不会了。想了一上午也没能想出来。先谢谢大家了。

最直白的模式的话...

#include <stdio.h>

void foo(int in)
{
int x = 0;

if (in & 0x8)
{
x += 5000;
}
if (in & 0x4)
{
x += 2500;
}
if (in & 0x2)
{
x += 1250;
}
if (in & 0x1)
{
x += 625;
}

printf("0.%04d\n", x);
}

void main()
{
foo(0x1);
}

-
另外
1000b表示0.5意味着放大了16倍 所以除以16。而你希望把0.5以5000输出,则要乘以10000。因为先除会损失精度,所以in * 10000 / 16就可以了。
不过这样对于没有乘法处理器的环境会比较慢。

在相除时要加点如10.0/3它就会带小数,然后你在*10,*100,就变成整数了,再来取值

你可以 把基数 X10 、x100 ... 之后 来计算