转载:https://blog.csdn.net/qq_39736982/article/details/82897647 转载:https://blog.csdn.net/BushQiang/article/details/79394211 https://blog.csdn.net/qq_26129689/article/details/50640293 无符号位移(>>>、>、>(若正数,高位补0,负数,高位补1) 正数:例如4>>2 首先写出4的二进制数,因为是正数所以最高位为0,也就是第一个 0000 0100 右移两位得到(高位补0) 0000 0001 结果为:1,右移n位也就是4/(2^n) 负数:例如-4>>2(高位补1) 首先写出-4的二进制数源码,因为是负数所以最高位为1 (负数的源码是负数的绝对值) 1000 0100 然后写出-4反码:保证符号位不变,其余位置取反 1111 1011(反码) 最后写出-4的补码:在反码的基础上加1 1111 1100(补码) 右移2位: 在高位补1 1111 1111 根据补码写出原码才是我们所求的结果, 保留符号位,然后减1取反 (或按位取反再加上1) 1111 1110(减1的结果) 1000 0001(取反的结果) 结果为:-1 2:无符号右移>>>(不论正负,高位均补0) 注意:无符号,所以都是当正数操作的 正数:例如4>>>2 与4>>2的运算相同,结果也为1 负数:例如-4>>>2 首先写出-4的二进制数,因为是负数所以最高位为1 1000 0100 然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了) 1111 1100(补码) 右移2位: 在高位补0 0011 1111 结果为:63 自己总结: Java中的位运算符: >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1; >>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。