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;」だと「精度が落ちている可能性」とエラーに