日期:2014-05-20  浏览次数:20839 次

请问2<<3为什么是2乘以8的最有效率的算法?<<这个运算符是什么意思?
还有
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译)
这个应该怎么解释呀?

------解决方案--------------------
2<<3
左移运算符,对应的二进制表示左移3位。计算机做这种运算比作乘法快,具体处理计算机组成原理应该会介绍。

short s1 = 1; 
s1 = s1 + 1;加法之后的结果是int类型,不允许把int类型直接赋值给short类型。

short s1 = 1; s1 += 1;
+=编译器会自动处理为 s1=(short)(s1+1);

具体原因是jvm并没有定义short,byte等类型的运算,这种类型的运算都是转换成int进行的,所以如果要把结果保存回short或者byte这些类型的话需要一个强制类型转换。