位运算之左移
深入了解之前先来了解一下位运算的左移与异或的基本概念
*左移运算符 -----将操作数的二进制码整体左移指定位数,左移后右边空出来的位以 0 填充,符号 << .
举例说明一: 5 << 2
5的二进制码:
左移2位后的二进制码:
空出来的位用 0 补齐
所以,5 << 2 的运算结果就为
1 * 24+ 0* 23 + 1 * 22 + 0 * 21 + 0*20
= 20
举例说明二: -5 << 2
-5的二进制码:
左移2位后的二进制码:
所以,-5 << 2的运算结果就是 -20
根据上面的举例,应该会发现:
5 << 2 可以看成是 5 * 22= 20 所以说5向左移2位就是5乘以2的2次方,那么向左移2位就是5乘以2的3次方
看到这里,我想大家都对位运算的左移运算都有了一定的了解,那么问题就来了:
问题一:如何最有效的计算出3 * 8 的值.
通常的解法的话,就是声明两个变量m和n ,一个赋予 3 ,一个赋予 8 ,然后在输出 m * n.
或者是直接输出 3 * 8 。当然这两个方法是可行的,但题目所说的最有效的方法。大家都知道,计算机底层都是用二进制做的运算,那么用二进制直接做运算就是一种最有效的方法,看到这里是不是会有所感悟了呢?
那现在就揭晓最后的答案,下面给出一段代码一看便知
这种方法的优点:计算效率较高,直接通过二进制做运算
缺点:1、要运算的的两个数,必须有一个是2的平方倍
2、很难想到,所以造成可读性较低