左移运算只有<<,表示不带符号左移。它作位移处理时,会直接左移并在低位填入0,所以如果被操作数太大(除符号位外的最高位为1)的话,原本的正数可能会变成负数。如(byte)(64<<1)得到的结果是-128,而(int)(64<<1)的结果则是正常的128。
右移运算有>>,它作位移处理时,会先将整个值向右移指定的位数,然后将所有空位填充为原符号位的值。顺带一提,右移运算遇到右边操作数为负数时会忽略其符号位,如>>-127与>>1的效果是一样的。
右移运算还有>>>,表示无符号右移,它处理时连符号位一起移动,然后在空出的高位全部填入0。当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。
tips:java中的简写(+=、-=等)这些在jdk1.8都会自动拆装箱。实际上单独计算的结果都自动转换成int类型。