The reason it works this way is because C and C++ used <<
for left shift and >>
for right shift long before Java. Those languages have both signed and unsigned types, and for signed types the sign bit was propagated in the right-shift case.
Java does not have unsigned types, so they kept the behavior of C and C++ so as not to sow confusion and incur the undying wrath of developers the world over. Then they included >>>
to provide a right-shift that treated the bit value as unsigned.
1
solved Bitwise shift operation choice