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

64 bit math novice question

Hello,

I am new and I would highly appreciate help for a 64 Bit math question:
signed long long Off = 0;
signed long long u = 0;
unsigned int psensor_c2 = 0;
unsigned int psensor_c4 = 0;
signed int dT = 0;
int i = 0;

i = psensor_c2 << 16; // i = f.e. 0x012345

u = ((signed long long) (psensor_c4 * dT)) / 128; // u = 0x900000

line3: Off = (signed long long) 0x900000 + 0x012345;
line4: Off = (signed long long) i + u;

line3 gives me as result 0x912345
line4 gives me as result 0xffffffff00912345

My problem is: I have a signed integer with a maximum of 40 Bit length. So I need 64 Bit math. And I tell this the compiler with the hint (signed long long).
Why does exactly the same line of code give different results ? I expect the line3 result and don t understand why in line 4 the ffffffff are added for the high word.

Do the experts recommend me to write this in assembler, so that I can be sure that it is done exactly the way I want to have my 64 Bit math. Or are there compiler specialist, who know, how to tell the compiler, that he should add a signed 64 bit value to a 32 bit integer.

Any hints are welcome.

0