because i tought the number of bits that will be shifted is 3 (99 % 32 (= max bits of an int)), so have no idea what's meant with lower 5 bits of long will be used
99 & 31 = 3
99 in binary:
00000000 00000000 00000000 01100011
31 in binary:
00000000 00000000 00000000 00011111
When they are ANDed together, the result is (in binary):
00000000 00000000 00000000 00000011
Or, 3. This is how everything but the five lowest bits are masked off. It's mathematically equivalent to %32, but the JLS specifically describes the behavior as using the five lowest bits for int values (six lowest for long).
Hope this helps...