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

数值类型乘除的优化和位运算原理(自己的理解)

位运算原理

  1. java中的位运算符
&:按位与。

|:按位或。

~:按位非。

^:按位异或。

<<:左位移运算符。

>>:右位移运算符。

<<<:无符号右移运算符。
  1. 位运算符中,除~以外 ,其余均为二元运算符。 操作数只能为整型和字符型数据 。
  2. 按位与(&):只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。
  3. 按位或(|):只有两个操作数对应位同为0时,结果为0,其余全为1.(或者是只要有一个操作数为1,结果就为1)。
  4. 按位非(~):0非之后是1,1非之后是0。
  5. 按位异或(^):两个操作数相同为0,不同为1
  6. 左位移(<<):符号位不变,低位补0。如:2<<2结果为8。当移动的位数超过数字本身的位数时,那么不就都需要补0操作,实际上不是的,java不可能做那么浪费资源的事情。在真正执行位移前,其对要移动的位数做了一些预处理,比如32处理为0,-1处理为31.
  7. 右位移(>>):低位溢出,符号位不变,并用符号位补溢出的高位。如:-6>>2结果为-2。
  8. 无符号右移(>>>):低位溢出,高位补0。注意,无符号右移(>>>)中的符号位(最高位)也跟着变,无符号的意思是将符号位当作数字位看待。

数值类型乘除的优化

  1. 程序只会进行加运算,减法乘法除法计算在程序中也会被转换成加法运算
  2. 例子:
//如以下例子

int a = 256;
int b = a * 100;
//如果直接这样运行,程序就是进行了100次加a的运算,非常耗时,所以考虑用位运算符代替

//试分析,右移一位即相当于给数成2,
//于是我们将*100分解为:64 32 4
int c = (a<<6) + (a<<5)  + (a<<2)

//这样便大大加快了程序的运行速率
//注意:两个位运算后的结果相加,要给位运算加括号,因为位运算的优先级小于加法

  1. 在java8之后,java对乘法进行了优化,当你进行运算时,java会自动检测能不能进行位运算,可以的话会先进行位运算,以便提高运算速率。

java中运算符的优先级

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值