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.
line 3 shows me: 0000000000912345 line 4 shows me: ffffffff00912345 The ffffffff is the difference.
Please show the specific code lines, the variable declaraions, and the specific input and output values.
State clearly how you are observing the values.
Show a couple of cases which "work", and a couple which you think "don't work"