java移位运算符<<, >>, >>>
二进制最左端的数字是符号位,0代表正,1代表负
逻辑左移=算数左移:高位移除,低位补0;
算数右移:低位溢出,高位用符号位的值补;
逻辑右移:低位溢出,高位补0;
比如一个有符号位的8位二进制数10101010,[]是添加的数字
逻辑左移一位:0101010[0]
逻辑左移两位:101010[00]
算术左移一位:0101010[0]
算术左移两位:101010[00]
逻辑右移一位:[0]1010101
逻辑右移两位:[00]101010
算术右移一位:[1]1010101
算术右移两位:[11]101010
算术左移和算术右移主要用来进行有符号数的倍增、减半
逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半
| 符号 | 例子 | 解释 |
|---|---|---|
| << | num<< n | 相当于 n u m × 2 n num×2^n num×2n,算数左移(逻辑左移) |
| >> | num>>n | 相当于 n u m 2 n begin{array}{cc} frac{num}{2^n} end{array} 2nnum,算数右移 |
| >>> | num>>>n | 逻辑右移(无符号右移),当num为正数和算数右移一个效果 |
如:
-10:
Java中-10表示为: 11111111111111111111111111110110
-10 >> 2为,带符号右移(算数右移): 11111111111111111111111111111101 = -3
-10 >>> 2为,无符号右移: 00111111111111111111111111111101 = 1073741821
额外:
-10 << 2,(逻辑左移,算数左移) 11111111111111111111111111011000 = -40
作者:Real_man
链接:https://www.jianshu.com/p/5af0d2152952
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
————————————————
版权声明:本文为CSDN博主「Java识堂」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzti_erlie/article/details/80204053



