首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于java中的char, byte, short的移位操作

Posted on 2012-03-06 08:37  饭后爱  阅读(2352)  评论(0编辑  收藏  举报

Java in think中有下面一句话:

若对char,byte 或者short 进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5 个低位才会用到。这样可防止我们在一个int 数里移动不切实际的位数。

 

对上面那句话的理解是:移位操作符操作的对象是二进制的"位",int类型是32位,也就是2的32次幂。如果移动32位以上,原来的数的信息会全部消失,这样也就没有什么意义了。
所以上面的“只有右侧的5个低位才会有用”说的是:移位操作符右端的那个数(化成二进制)的低五位才有用,即x<<y,是指y的低5位才有用,即不能大于32。对于long也是同样道理。

因此,如果对一个int型进行移位,x<<y;
当y小于32时,移位后的结果一般都在能表示的范围,这时就先把y化成二进制数,然后取该二进制数的低5位,再把这5位化成十进制,此时这个十进制就是要对X移动的位数。

例如: int a = 140;
System.out.println(Integer.toBinaryString(a << 34));
上面这个语句的执行过程是:
先把a化成二进制数:1000 1100
执行语句 a << 34时,先把34化成二进制 10 0010,对该二进制数取低5位0 0010,化成十进制数2,所以实际上是对a左移2位。

现在地球人都知道结果是: 10 0011 0000