The old code uses >>> 1 because -1 % 32 is negative. So if the high bit was set we would get a negative array index, and that doesn't work in Java. :-)

Doing >>> 1 to "clear" the high bit and force the value positive is faster than any other means of making the value positive, especially when you know w1 is coming from SHA-1 and all of the bits are about equally as good for our hash code.

The old code used % rather than & because I think the table used to use a prime number for its length, rather than a power of 2. But we have since changed to using a power of 2, so & is faster.

And yes, all of the bits are about equally as good coming from w1, and the newer code is 1 fewer instructions and the remaining instruction is faster to execute for most processors.