Comment by astrange
It's not implementation-defined in Java because there aren't any unsigned types.
Personally I think explicit typecasts are even more suspicious, because introducing explicit semantics is worse than implicit semantics if the explicit ones are wrong.