This compliant solution reads-in an unsigned integer value into a {{long}} variable. The final value is stored in the lower 4 bytes of the {{long}} variable and the upper 4 bytes are zeroed out by and'ing with {{0xFFFFFFFF}}an array of four bytes. The bytes are left shifted the appropriate amount and OR'ed together. However, when the bytes are shifted they are promoted to int. If the byte is negative, then all the left-most bits of the resulting int will be set, and these have to be masked off. Finally, the whole int expression may be negative when it is promoted to the long {{result}} and, again, the left-most bits have to be masked off. (cf. \[[Harold 97|AA. Java References#Harold 97]\] but the code there is wrong.) |