Hello,
there might be an undetected overrun in the result of 'a * b'. So i used the cast ((unsigned long long int)a to force the result of 'a * b' to long long. Unfortunately this compiler warning.
unsigned int n,a,b,c; //************************************************************************* void main(void) { a = 1; b = 1024; printf("Hello\n"); for(n=0;n<8;n++) { c = ((unsigned long long int)a * b) >> 10; printf("%u %10u %10u\n",n,a,c); a *= 10; } while(1){} }
Should I ignore the warning? or better how to work around?
Then you have to inform the compiler that you guarantee that the result (after the shift) will fit
Close, but not quite true. What that cast does is inform the compiler that you don't care about the case where the result might be too large for an "unsigned int". This cast is an expression of intent, not one of knowledge.