This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Arithametics

Hi All,

I am experiencing a basic problem in the arithametic of the instrucation

A = ((B-C)*100)/204

during execution of the instruction, if the result of (B-C)*100 is greater than 16 bits what will happen? for avoiding data loss do I have to declare it as 32 bit variable or the proceesor will handle it without changing the size?

Variable A is declared as 16 bit.

do I have to use both B and C 32 bit if i conditionally change the instrucation as

A = ((C-B)*100)/204

during execution ?

my code will look like this


if (B>C) A = ((B-C)*100)/204;

else if (C>B) A = ((C-B)*100)/204 ;


my processor is C8051F020
compiler is C51

best regards
Deepak

Parents
  • But I think my problem doesn't solved by making long A variable.

    That alone will not do the trick. But you can make A a long int and then do the calculations with A:

    A = B;
    A = A - C;
    A = A * 100;
    A = A / 204;
    

    Depending on what the compiler actually does with the above, using a local long int variable might be faster.

Reply
  • But I think my problem doesn't solved by making long A variable.

    That alone will not do the trick. But you can make A a long int and then do the calculations with A:

    A = B;
    A = A - C;
    A = A * 100;
    A = A / 204;
    

    Depending on what the compiler actually does with the above, using a local long int variable might be faster.

Children
No data