Java FAQ:byte に対するシフト演算子「>>>=」

Java FAQ:S007 Q-12

public class C2008032700 {
    public static void main(String[] args) {
        byte b;

        b = -1;
        b = (byte)(b >>> 1);
        System.out.println("b : " + b + " " + Integer.toHexString(b));


        b = -1;
        b = (byte)((int)b >>> 1);
        System.out.println("b : " + b + " " + Integer.toHexString(b));


        b = -1;
        b = (byte)((b & 0xFF) >>> 1);
        System.out.println("b : " + b + " " + Integer.toHexString(b));
    }
}

で、

b : -1 ffffffff
b : -1 ffffffff
b : 127 7f
  • int に格上げされてからシフトされるらしい
  • 「b = (byte)(b >>> 1);」が「b = b >>> 1;」だと「精度が落ちている可能性」とエラーに