通常我们会看到这样的面试题:请用最有效率的方法计算出2乘以8等于几?答案当然是使用位移操作符:
2 << 3;
因为直接操作的二进制位所以效率高。
位移操作符有如下特性,是很多初学者不知道的:
1、只能应用于byte,shot,int , long , char ,而byte,shot,char在做 位运算 之前会先转换成int类型,当然结果也是int类型。long类型的位运算后结果为long。
2、(重点)位移的位数不能超过对应数据类型的最大位数。比如:
1 << 34;
位移操作符左边的左操作数为int类型占据4个字节32位,那么位移操作符右边指定的位移数不能超过32,超过32位后原数值的数据将全部丢失(因为都移没了),那么位移也就没有了意义。但是,上面的语句是可以运行的,运行的结果等同于:
1 << 2;
这是因为 位移的实际位数只使用右 操作数 的低5位。 对应上面的例子就是,位移的实际位数实际上是34对应的 二进制 的低5位所代表的的值。34转换成二进制位:100010。其后五位对应的值为2,所有实际的位移位数为2。
这么做就是为了防止位移的位数超过对应类型的最大位数。
当位移操作符左边的数值为long的时候位移的 实际位数只使用右操作数的低6位。 原因同上。
怎么样你了解了吗?
觉得有帮助就点击关注欧,我将持续分享简介明了的知识点。