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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步