und was ist jetzt mit dem Überlauf?
Angenommen 32Bit Prozessor, wenn ich eine Prozentrechung habe:
kann man natürlich auch auf einen 16- oder 8- Bitter haben,
dann halt long durch short bzw. char ersetzen.
char Prozent(long lAkt, long lGes)
{
unsigned long ulAkt,ulGes,ulRet;
if(lAkt< 0)
{
ulAkt= (~lAkt);
}else{
ulAkt= (lAkt);
}
if(lGes< 0)
{
ulGes= ~lGes;
}else{
ulGes= (lGes);
}
if(ulGes == 0)
{
return 0;
}
else
{
ulRet = (ulAkt*100) / ulGes;
}
if(ulRet > 0xFF)
{
return 0xFF;
}
else
{
return (uint8)ulRet;
}
}
int main(void) {
char cPercent = 0;
long lAkt = 0;
long lGes = 0;
//(1)Testfall 1: MIN_INT32,MIN_INT32 ergibt 0 statt 100 \n");
lAkt = INT_MIN;
lGes = INT_MIN;
cPercent = Prozent(lAkt, lGes);
return 0;
}
MfG
Mel