cnfox

Java高性能运算-位运算代替乘除法
位运算 比较简单,直接一张图然后简单解释下就好了3<<2 3向左位运算2位首先将3这个十进...
扫描右侧二维码阅读全文
26
2019/08

Java高性能运算-位运算代替乘除法

位运算

 比较简单,直接一张图然后简单解释下就好了

3<<2 3向左位运算2位

  1. 首先将3这个十进制转换成32位的2进制 -->0000-0000 0000-0000 0000-0000 0000-0011
  2. 然后将二进制向左移动两位,整体要保持32位的2进制,所以左边被舍弃了两位,右边补两个0 -->00-0000 0000-0000
    0000-0000 0000-001100
  3. 00-0000 0000-00000000-0000 0000-001100转换成十进制是12 ,所以3<<2的值就是12

6>>2 6向右位运算2位

  1. 首先将6这个十进制转换成32位的2进制 -->0000-0000 0000-0000 0000-0000 0000-0110
  2. 然后将二进制向友移动两位,整体要保持32位的2进制,所以右边被舍弃了两位,左边补两个0 -->000000-0000 0000-0000
    0000-0000 0000-001
  3. 000000-0000 0000-00000000-0000 0000-001转换成十进制是12 ,所以6>>2的值就是1

位运算
总结下规律

  • <<:其实就是乘以2的移动的位数次幂。
  • >>:就是除以2的移动的位数次幕。

位运算高效乘法运算

乘法以 2*8为栗

 传统的 2*8 底层的运算实际上是将 2 和 8 转换成2进制,然后再进行乘法运算,解释如下:

  1000
* 0010
 ------
  0000
 1000
 ------
 10000=16

 使用位运算来思考这道题,8可以分解为2的三次方,那 计算 2*8 就可以把2的二进制(0000-0000 0000-0000 0000-0000 0000-0010)向左移动三位补齐后得到二进制(0-0000 0000-0000 0000-0000 0000-0010000)结果为16

Last modification:August 26th, 2019 at 09:41 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment