运算符中需要注意点几点
1.&&,&,||,|的区别
&&:如果左边false,不就行后边的判断,返回false ||:如果左边true,不就行后边的判断,返回true &:如果左边false,还继续后边的判断,返回false |:如果左边true,还继续后边的判断,返回true2位运算符
A:^的特殊用法 不同为1,相同为0,a^b^b=a B:运算是通过补码来运算的 请用最有效率的方式计算出2乘以16的结果 2<<4 2左移动4位,等价于2* 2^4 3三元运算符 比较表达式?表达式1:表达式2; 例如:2>1:2?34:++,- -,+=,-=有强制转化的效果
short s = 1; s = s + 1; 变量运算都转化为int类型,int–》shout 丢精度,编译报错 short s = 1; s += 1;对的,实际上是 s=(short )(s+1);扩展:引用java核心技术的内容
可移植性是无论在哪个虚拟机上运行,同一运算应该得到同样的结果,对于浮点数的算术运算,实现这样的可移植性是相当困难的.
double类型使用64位存储一个double值,而有些处理器使用80位浮点寄存器.这些寄存器增加了中间过程的计算精度 例如.double w=x*y/2 很多intel处理器计算算x*y,并且将结果存储在80位的寄存器中,再除以z并将结果截断为64位,这样可以得到一个更加情确的计算结果还能够避免产生指数溢出。但是这个结果可能与始终在64位机器上计算的结果不一样,因此java虚拟机的最初规范规定所有的中间计算都必须进行截断,这种行为遭到了计算机团体的反对。 截断计算不仅可能导致溢出,而且截断操作需要消耗时间,所以在计算速度上要比精确计算慢,为此java 程序设计语言承认了最优性能与理想结果之间存在的冲突,并给予了改进,在默认情况下,虚拟机设计者允许将中间计算结果采用扩展的精度,但是对于使用从strictfp关健字标记的方法必须使用严格的浮点计算来产生理想的结果例如。 可以把mian方法标记为 public static strictfp void main(String[] args) 于是这个main中的所有指令都要使用严格的浮点计算。 如果将一个类标记为strictfp 于是这个类中的所有指令都要使用严格的浮点计算。采用默认的方式不会产生溢出
采用严格计算有可能产生溢出