运算符

1.算术运算符
在Java中,用+、-、*、/表示加减乘除,求余操作用%表示。整数除以0将会产生一个异常,而浮点数除以0将会得到无穷大或NaN结果。

2.数学函数
在Java中有一个Math类,它包含了各种各样的数学函数。如计算一个数的平方根可以使用sqrt方法,sqrt(4)=2,计算一个数的幂用pow方法,pow(x,a)=x的a次幂,让一个数进行四舍五入运算用round方法。
注:sqrt处理的不是对象,它被称为静态方法。
Math类中提供了一些三角函数,指数函数,对数以及用于表示π 和e 常量的近似值Math.PI和Math.E。
在使用这些方法前应在源文件的顶部添加一行代码引入Math类:import java.lang.Math.*;

3.类型转换
Java中类型转换分为显式类型转换(强制类型转换)和隐式类型转换。
隐式转换为小转大,没有精度的缺失,显式转换为大转小,部分存在精度的缺失。
两个数进行运算时如果其中有一个为double类型,则另一个数就被转成double类型,否则如果有一个为float类型,则另一个被转成float类型,否则如果有一个为long类型,则另一个被转成long类型,否则两个数被转成int类型。
变量在参与运算时:byte、short、char---->int —>long---->float—>double
把long转换为float是因为:
①float和long在计算机底层的存储结构不同;
②float表示的数据范围比long要大

4.结合赋值
Java中赋值用=,但也有一些结合赋值运算符如+=、-=、*=、/=、%=等。

赋值运算符易错点:
short s=1; s=s+1; (×) 此处会出现错误不能从int到short,原因是short类型的变量在参与运算时首先要被转为int,然后才参与运算
short s=1; s+=1; (√) //s=2 扩展的赋值运算符(如:+=)即结合赋值其实隐藏了一个强制类型转换,所有s+=1并不等价于s=s+1;而是等价于s=(s的数据类型)(s+1),此处为强制类型转换
byte b; b=3+4; b=12; (√) 常量做加法,先将结果计算出来,然后看结果是否在byte的范围内,如果在就不报错,所以在代码中将一个符合byte范围的常量给byte是不报错的
④byte b=130;有没有问题?如果想让赋值正确,应该怎么做?结果是多少?
答:有问题(注意byte的范围),强制类型转换,结果的运算:
        转换成计算机的补码(int):00000000 00000000 00000000 10000010
        提取byte(8位):10000010(补码)
        转换成原码:1 1111110=-126
结论:当byte的值超出范围后,会从最底部再次循环输出,就像一个圆。例,

byte b=127; 
byte b1=-128;
byte b2=(byte)128;  //-128
byte b3=(byte)129;  //-127
byte b4=(byte)130;  //-126
byte b5=(byte)256;  //0
byte b6=(byte)-129; //127

5.自增、自减运算符
Java的自增、自减运算符有a++、++a、a–、--a四种。

6.关系运算符
Java中用==检测相等,!=检测不等,<、>、<=、>=等。
&&表示‘与’,||表示‘或’,!表示‘非’。与和或运算符遵循‘短路’方式来求值,即当第一个操作数能确定表达式的值,后面的运算就不再进行。
三元操作符: a>b? a:b

三元操作符易错点:

int a=3<4.5?3:4.5;  (×)//只要结果中有浮点数就应该用double表示
double a=3<4.5?3:4.5;   (√)
int a=3<4.5?3:4;  (√)//说明和布尔表达式的参数无关

三元操作符不仅可以求两个数的最大值,还可以求出三个数的最大值,例,

int max=a>b?a:b;  //求两个数的最大值
int max= a>b?(a>c?a:c):(b>c?b:c);  //求三个数的最大值

7.位运算符
位运算符有&、|、^(异或)、~(取反)、>>、>>>、<<。

详细描述请看:C#学习总结(4)—C#运算符与数据类型转换

位运算符扩展:
①一个数据对另一个数据异或(^)两次,值不变
a ^ b ^ b=a(后面两个相同所以为0,0与a异或相同为0,不同为1,a没有变化)
a ^ b ^ a=b(可以交换)
例,int a=10,b=20;用^将它们交换(思路:利用上面的两个异或式子分解):
结论: 左边:a、b、a 右边:a^b
a=a^b; b=a^b; a=a^b; 变量相加方法:a=a+b; b=a-b; a=a-b; 或:b=(a+b)-(a=b); ②移位运算符
左移(<<)等价于数据2的移动次幂
右移(>>)等价于数据/2的移动次幂
注:乘法在底层都被转为移位运算,所以28==2<< 3;后面的式子最有效率,因为相当于直接从底层开始

8.运算符优先级及结合性

java整除结果 java中整除怎么表示_java


java整除结果 java中整除怎么表示_Math_02


这里需要记住结合性特殊的几种。

java整除结果 java中整除怎么表示_Java_03