数值类型乘除的优化和位运算原理(自己的理解) 位运算原理数值类型乘除的优化java中运算符的优先级 位运算原理 java中的位运算符 &:按位与。 |:按位或。 ~:按位非。 ^:按位异或。 <<:左位移运算符。 >>:右位移运算符。 <<<:无符号右移运算符。 位运算符中,除~以外 ,其余均为二元运算符。 操作数只能为整型和字符型数据 。按位与(&):只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。按位或(|):只有两个操作数对应位同为0时,结果为0,其余全为1.(或者是只要有一个操作数为1,结果就为1)。按位非(~):0非之后是1,1非之后是0。按位异或(^):两个操作数相同为0,不同为1左位移(<<):符号位不变,低位补0。如:2<<2结果为8。当移动的位数超过数字本身的位数时,那么不就都需要补0操作,实际上不是的,java不可能做那么浪费资源的事情。在真正执行位移前,其对要移动的位数做了一些预处理,比如32处理为0,-1处理为31.右位移(>>):低位溢出,符号位不变,并用符号位补溢出的高位。如:-6>>2结果为-2。无符号右移(>>>):低位溢出,高位补0。注意,无符号右移(>>>)中的符号位(最高位)也跟着变,无符号的意思是将符号位当作数字位看待。 数值类型乘除的优化 程序只会进行加运算,减法乘法除法计算在程序中也会被转换成加法运算例子: //如以下例子 int a = 256; int b = a * 100; //如果直接这样运行,程序就是进行了100次加a的运算,非常耗时,所以考虑用位运算符代替 //试分析,右移一位即相当于给数成2, //于是我们将*100分解为:64 32 4 int c = (a<<6) + (a<<5) + (a<<2) //这样便大大加快了程序的运行速率 //注意:两个位运算后的结果相加,要给位运算加括号,因为位运算的优先级小于加法 在java8之后,java对乘法进行了优化,当你进行运算时,java会自动检测能不能进行位运算,可以的话会先进行位运算,以便提高运算速率。 java中运算符的优先级