左移:二进制整体左移,然后在低位补0
右移:二进制整体右移,在高位补全,补全内容根据第一位的值来确定,正数高为补0,负数高为补1。
无符号右移:二进制整体右移,在高位补0。
在使用过程中可能出现的问题(int类型位移的位数实际是对32进行取余):
1、int类型移动32位:-1左移31位是 1000 0000 0000 0000 0000 0000 0000 0000,但是左移32位并不是0,而是-1,而 1000 0000 0000 0000 0000 0000 0000 0000左移一位就是0。因为int类型位移的位数实际是对32进行取余,如果移动32位实际是没有移动。
2、int类型移动大于32位:-1<<33,位移的效果就是-1<<1。
3、int类型移动负数位:-1<<-1,位移的效果就是-1<<31。
截图是测试代码和运行结果(long类型的问题在64位上,和int类型一样),位移操作在平时写代码中很少用到因为阅读起来比较难,但是jdk源码中用的比较多,所以还是要弄明白。
打印结果: