一:什么是移位运算符
在Java中,最高位代表符号位(0为正数,1为负数), 0...010000(...表示中间省略了25个0)为正16,1...010000为负16。
<<(带符号左移) ,>>(带符号右移),>>>(不带符号右移)。
int 16 可以表示为 0...010000 (...表示中间省略了25个0)
16 >> 1 转换为 0...001000 相当于除2。
16 << 1 转换为 0...100000 相当于乘2。
16>>>1 因为16为正数,右移最高位自动补0,所以在正数中和 >>效果一样,而负数的话最高位为1,在执行>>>最高位自动补0,就变成了正数
二:为什么要使用移位运算符
在做乘,除运算的时候,Java需要调用底层库,这个操作比较耗时。直接用位运算可以提高程序的性能。