运算符

来源:互联网 发布:电脑网络专家在线咨询 编辑:程序博客网 时间:2024/05/02 20:20

运算符中需要注意点几点

1.&&,&,||,|的区别
&&:如果左边false,不就行后边的判断,返回false
||:如果左边true,不就行后边的判断,返回true
&:如果左边false,还继续后边的判断,返回false
|:如果左边true,还继续后边的判断,返回true

2位运算符
A:^的特殊用法
不同为1,相同为0,a^b^b=a
B:运算是通过补码来运算的
请用最有效率的方式计算出2乘以16的结果
2<<4 2左移动4位,等价于2* 2^4
3三元运算符
比较表达式?表达式1:表达式2;
例如:2>1:2?3

4:++,- -,+=,-=有强制转化的效果
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
于是这个类中的所有指令都要使用严格的浮点计算。

采用默认的方式不会产生溢出
采用严格计算有可能产生溢出

0 0
原创粉丝点击