The number 0x11 might be used as a 16-bit integer.
I'm not sure how to declare a long, I know 17L is a long.
You can do this:
long L1 = 17L;
L1 <<= 16;
Or do you want the preprocessor to do the shifting ?
There is another option. When the offset is always 24, or 16 or 8, you could create a union with a long and a byte array, and you can write it directly into the position you want.
Literal number constants are interpreted as ints (which are 16-bit on AVRs). When you shift an int 16 bits, you overflow it and there's nothing left in the value.