java移位运算符

移位运算符的优先级是低于+和-的。所以,

byte a = 5;
int b = 10;
int c = a>>2+b>>2;
System.out.println(c);

上面的这个操作的结果是0而不是3。

-----------------------------------------------------------------

看下图:

java移位运算符_第1张图片

图中,b<<2之后再赋值给b,就报错了。这是因为byte或者short在移位运算之后,自动转型为int了。再赋给byte,当然会报错了。

-----------------------------------

在java中,没有无符号数(unsigned)。

int类型有32位,其中最高位是符号位。

数字在进行了移位操作之后,符号位是不变的。

所以int类型在进行移位操作的时候,最高位的符号位不变化,其他的31位如果进行的是左移,那么低位补0。如果是进行的右移,那么高位补什么,需要看数字本身的符号。如果是负数,则补1,如果是正数,则补0。【也就是说,补的数字与符号位相同】

如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。

----------------------------------------------------

java还有一个无符号右移操作(>>>操作符)。

作用是把一个数字连同符号位,一起向右移动。

java移位运算符_第2张图片

从结果页可以看出来,12无符号左移一位,变成6。

 

你可能感兴趣的:(java移位运算符)