JAVA 中的右移操作相信大家都不会陌生,最近遇到8位byte整形右移的过程中发现却是有很难被注意到的问题,
-127 二进制源码 1111 1111 反码 1000 0000 补码 1000 0001
byte i = (byte) 0b10000001;
byte y = (byte) (i>>2);
byte z = (byte) (i>>>2);
// y = -32
// z = -32
为什么这里的符号位右移和无符号位右移是一样的结果,唯一的解释就是转为了32位再进行的右移操作。