This pattern is typical for assigning a 64-bit value to a variable on a 32 bit system - you calculate each 32-bit value separately, then push them into the high and low 32 bits of the 64 bit value.
In Java, your first assignment would be
fMax=(fMax & 0xFFFFFFFF00000000) | (v12 & 0x00000000FFFFFFFF)
and the second would be
fMax=(fMax & 0x00000000FFFFFFFF) | (((long)v13<<32) & 0xFFFFFFFF00000000)
Of course, fMax is a 64 bit long here.
You can omit the & 0xFFFFFFFF00000000 from the second expression, as you know those bits will be zero after the left shift. And you can omit the & 0x00000000FFFFFFFF from the first expression if v12 is an int, since the high bits will be zero anyway in a 32 bit integer. But the java compiler will probably optimize these away anyway, and i wanted to write the statements in a way that makes clear which bits are taken from fMax, and which from v12 and v13.
LODWORD()takes the low DWORD fromfMax, andHIDWORD()the high DWORD. Basically, if you got an__int64like this:x = 0xFFFFFFFFAAAAAAAA,LODWORD(x)is0xAAAAAAAAandHIDWORD(x)is0xFFFFFFFF– rev Feb 20 '15 at 01:27&, and the first expression should read...*(_DWORD *) &v12, as you want to select the low 32 bits from v12, instead of treating v12 as a pointer. – Guntram Blohm Feb 20 '15 at 06:49