Java移位运算中,数值右端的低5位才有用

Java移位运算中,数值右端的低5位才有用

晚上纠结了很久这个问题,不懂为什么低5位才有用,怎么就2^5等于32位,跟int的32位挂上钩了,思考了很久终于明白了。

这段话有两个出处:
一个是Java编程思想3.11移位操作符中出现,原话是“只有数值右端的低5位才有用”。
一个是Java解惑中谜题27:变幻莫测的i值,原话是“移位操作符只使用其右操作数的低5位作为移位长度”。

弄清这句话首先需要弄清楚移位操作符,移位操作符是一个二元操作符,两个操作数分别位于移位操作两边形如:左操作数 移位操作符 右操作数 这样的结构,其含义是,将左操作数按照移位操作符指定的移位方向,进行右操作数指定的次数的移位。然后对照出处二,Java解惑中所描述的,就豁然开朗了。

首先,移位操作符能操作的数只有int类型和long类型,这个是指左操作数的类型。对于int类型而言,int在Java中占4字节,一共32位,也就是说,对于一个在Java中的int数据,做32次移位,那么这个int数据就完全变了,以左移为例,左移是补0,那么对于任意一个int类型数据,做32次移位,那么int数据变成32位全0的数据,Java不允许一次性移位左操作数的所有位,也就是右操作数不能大于32。于是回到上述的句子,其指的是右操作数的低5位,5位二进制所代表的最大值为2^5-1 = 31,所以取右操作数的低5位,就是只看右操作数的二进制的低5位,其数值不会超过32。因此,移位操作符进行移位的实际次数,其实是右操作数2的次数。

猜你喜欢

转载自blog.csdn.net/qq_32534441/article/details/83583196