Java 算术运算

Java 算术运算,算术运算符有加、减、乘、除,符号分别是+、-、*、/,另外还有取模运算符%,以及自增(++)和自减(–)运算符。取模运算适用于整数和字符类型,其他算术运算适用于所有数值类型和字符类型。大部分运算都符合我们的数学常识,但字符怎么也可以进行算术运算?

减号(-)通常用于两个数相减,但也可以放在一个数前面,例如-a,这表示改变a的符号,原来的正数会变为负数,原来的负数会变为正数,这也是符合我们常识的。

取模(%)就是数学中的求余数,例如,5%3是2,10%5是0。

自增(++)和自减(–),是一种快捷方式,是对自己进行加1或减1操作。

加、减、乘、除大部分情况和数学运算是一样的,都很容易理解,但有一些需要注意的地方,而自增、自减稍微复杂一些,下面我们解释下。

1.加、减、乘、除注意事项
运算时要注意结果的范围,使用恰当的数据类型。两个正数都可以用int表示,但相乘的结果可能就会超出,超出后结果会令人困惑,例如:

int a = 2147483647*2; //2147483647是int能表示的最大值

a的结果是-2。为什么是-2我们暂不解释,要避免这种情况,我们的结果类型应使用long,但只改为long也是不够的,因为运算还是默认按照int类型进行,需要将至少一个数据表示为long形式,即在后面加L或l,下面这样才会出现期望的结果:

long a = 2147483647*2L;

另外,需要注意的是,整数相除不是四舍五入,而是直接舍去小数位,例如:

double d = 10/4;

结果是2而不是2.5,如果要按小数进行运算,需要将至少一个数表示为小数形式,或者使用强制类型转化,即在数字前面加(double),表示将数字看作double类型,如下所示任意一种形式都可以:

a) double d = 10/4.0;
b) double d = 10/(double)4;

2.小数计算结果不精确
无论是使用float还是double,进行运算时都会出现一些非常令人困惑的现象,比如:

float f = 0.1f*0.1f;
System.out.println(f);

这个结果看上去应该是0.01,但实际上,屏幕输出却是0.010000001,后面多了个1。换用double看看:

double d = 0.1*0.1;
System.out.println(d);

屏幕输出0.010000000000000002,一连串的0之后多了个2,结果也不精确。
这是怎么回事?看上去这么简单的运算,计算机计算的结果怎么不精确呢?但事实就是这样,究其原因,我们需要理解float和double的二进制表示。

3.自增(++)/自减(–)
自增/自减是对自己做加1或减1操作,但每个都有两种形式,一种是放在变量后,例如a++、a--,另一种是放在变量前,例如++a、--a

如果只是对自己操作,这两种形式也没什么差别,区别在于还有其他操作的时候。放在变量后(a++)是先用原来的值进行其他操作,然后再对自己做修改,而放在变量前(++a)是先对自己做修改,再用修改后的值进行其他操作。例如,快捷运算和其等同的运算如表所示。
Java 算术运算

自增/自减是“快捷”操作,是让程序员少写代码的,但遗憾的是,由于比较奇怪的语法和诡异的行为,给初学者带来了一些困惑。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!