数值类型乘除的优化位运算原理

引言:编程语言不只有直接对数值进行计算的运算符(+、-、*、/ 等等),还有精确到位的位运算符:左移<<和右移>>
(1)位运算符简介
位运算符用于对给定数值的每一位进行操作。

左移运算符<<对数值的每一位进行左移操作,因为计算机是二进制数值,所以左移一位的实质是对数值进行乘2。以此类推,左移两位是对数值进行乘4,左移三位进行乘4。
相应的,右移运算符>>对数值每一位进行右移操作,右移一位的实质是对数值除以2.右移两位除以4,右移三位除以8.

(2)计算机乘除的实质

学过计算机组成原理的话我们应该知道,计算机CPU的逻辑运算单元(ALU)只有加法,减法和乘法、除法都是加法的变换。当我们对数值乘一个较大的数时,实际上是ALU进行了许多次的加法运算。

(3)位运算对乘除法运算的优化

前边说到,位运算的实质是对数值进行乘除运算(数值为2的幂级)。所以当我们对数值使用乘法运算时,可以将其转换相同数值的位运算,比如:4
int a=4;
int b=4*150;
ALU的实质是4加4加了150次
加入使用位运算符达到相同效果:
int a=4;
int b=(a<<7)+(a<<4)+(a<<2)+(a<<1);

使用位运算符替换乘法运算的原因是使用位运算时,CPU只要对每一位左移即可达到乘法目的,大量节省ALU计算时间,尤其是乘数很大时。

注:目前新版本的JDK已经对乘法做了优化,优化手段就是将乘法转换为相应的位运算,大量节省计算时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值