>>306
Chapter 15. Expressions
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1
|
| 15.22.1。 整数ビット演算子&、^、|
| オペランドに対してバイナリ数値昇格が最初に実行されます。
|
| 5.6.2。バイナリ数値昇格
| いずれかのオペランドがdouble型であれば、他方はdouble型に変換されます。
| それ以外の場合、どちらかのオペランドがfloat型であれば、もう一方はfloat型に変換されます。
| それ以外の場合、どちらかのオペランドがlong型であれば、他方はlong型に変換されます。
| それ以外の場合、両方のオペランドがint型に変換されます。

ということなので今回の場合はlong型に変換されるはずよ

> longNumber = unsignedInt & 0x00000000FFFFFFFF

これは末尾にLをつけないとlongにならないかと

> int unsignedInt = -1;
> long longNumber = unsignedInt & 0xFFFFFFFFL;

上をコンパイルして逆コンパイルしたら下になった

> int unsignedInt = -1;
> long longNumber = (long)unsignedInt & 4294967295L;

なので型の変換はキャストっすね

Java 8ならInteger.toUnsignedLongというメソッドが用意されてるので
そっちが良いかも