持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
除法精度
java算术运算符中的 / 除法我们都知道,但是在计算机中的运算并不是 我们想的那样
10 / 4 ?
10 / 4 = 2 // 不是2.5
精度提升
10.0 / 4 = 2.5
double d = 10 / 4 ?
double d = 10 / 4 // ===> 把2赋值给d
d = 2.0
取余本质
在java的算术预算符 我们都知道 % 是取余或者取模的意思但是它的的运算方式你知道吗
例子:
10 % 3 ?
-10 % 3 ?
10 % -3 ?
-10 % -3 ?
% 的本质是 公式 a % b = a - a / b * b
其中,等号右边的a / b
的值向0靠近(当a和b的符号不同时
所以
10 % 3 =1
-10 % 3 = -1
10% -3 = 1
-10 % -3 = -1 (-10)-(-10)/(-3)*(-3)= -1
System.out.println(10 % 3);//输出1
System.out.println(-10 % 3);//输出-1
System.out.println(10 % -3);//输出1
取余和取模的区别
在编程语言中,取余和取模运算,都是用%来表示。
对整型变量a、b来说,求余运算和取模运算的公式都是:(分2步进行) Step1:c = a / b; Step2:a % b = a - c * b; 取余和取模的区别就在于c取值的不同。
对于取余:在计算c的值时,向0方向舍入;
对于取模:在计算c的值时,向负无穷方向舍入。
带来的问题是:
当a和b正负号相同时,取余和取模在计算c的值时,得出的结果是相同的。即此时0方向和负无穷方向是一个方向。------->此时取余运算和取模运算的结果是相同的,因此可以把两者看成是一样的。
当a和b的正负号不同时,此时取余和取模在计算c的值时,得出的结果是不相同的。------->从而此时的取余就不等于取模。
int a = -5;
int b = 3;
int c = a / b;//取余运算,c的值为-1;取模运算,c的值为-2
int d = a % b;////取余运算,d = -5 - (-1 * 3) = -2;取模运算,d = -5 - (-2 * 3) = 1
public class ArithmeticOperator{
public static void main(String[] args){
System.out.println(-5 % 3);//输出-2
System.out.println(5 % -3);//输出2
}
}
算术预算符自增 自减
在java的算术预算符自增 自减 i++ ++i i-- --i
前++ 和后++ 作为独立使用时候 完全等价于 i= i + 1 作为表达式使用的话
++i i先自增 再赋值
i++ i先赋值 再自增
例子
独立使用
int a = 5
a++
++a
a = 7
表达式使用
int j = 8
int k = ++j //等价于 j= j+1 k=j
k = 9 j = 9
int j = 8
int k = j++ //等价于 k=j j=j+1
k = 8 j = 9
面试题
例子1:
int i = 1
i = i++
System.out.printIn(i) // 1
解析:
在运算过程中 会在内存中有个临时变量temp
1.temp = i
2.i = i + 1
3.i= temp
例子2:
int i = 1
i = ++i
System.out.printIn(i) // 2
解析:
在运算过程中 会在内存中有个临时变量temp
1.i = i + 1
2.temp = i
3.i= temp