运算符与表达式
1、数学运算:+ - * / % ++ –
注意事项:
A.+-*/两端的变量必须是同种类型,并返回同种类型 ;
B.%取余运算,负数的余数符号与被模数符号相同,-1%5=-1,1%-5=-1;Num%n, n>0, 结果范围[0,n), 是周期函数。
C.注意整除问题:1/2=0(整数的除法算式整除0.5=0) 1.0/2=0.5 1D/2=0.5
D.单独的前、后自增或自减是没区别的,有了赋值语句或返回值,则值不同。
eg1:自增自减
int a=1;
a=a++;
System.out.println(“a的值:”+a) ;
第一步:后++,先确定表达式a++的值(当前a的值)a++
- - ->1
第二步:++,给a加1 a
- - ->2
第三步:最后赋值运算,把a++整个表达式的值赋给a
- - ->1
a被赋值两次,第一次a=2,第二次把1赋值给1。
eg2:自增自减
x,y,z分别是5,6,7 计算z+=–y*z++;
//x=5,y=5,z=42
z=z+–y*z++;
- - ->42=7+5*7
从左到右入栈,入的是值
eg3:取出数字的每一位
d=num%10;//获取num的最后一位数
num/=10;//消除num的最后一位
2、位运算:& | ~(取反) ^(异或) >> << >>>
注意事项:
*一个数异或同一个数两次,结果还是那个数。
*|:上下对齐,有1个1则为1;&:上下对齐,有1个0则为0;(都为二进制)
*&相当于乘法,|相当于加法;&:有0则为0,|:有1则为1,^:两数相同为0,不同为1。
3、关系运算符:> < >= <= == !=
4、逻辑运算符:&& || ! & |
eg:短路运算:&&:前边为false,则后边不计算,||:前边为true则后边不计算。
int x=1,y=1,z=1;
if(x–==1&&y++==1||z++==1)
//||短路运算后面的不执行了。
System.out.println(“x=”+x+”,y=”+y+”,z=”+z);
//0,2,1
5、赋值运算符:= += -= *= /= %=
eg:正负1交替
int flag=-1;
System.out.println(flag*=-1);
6、条件运算符(三目运算)
表达式1?表达式2:表达式3
注意事项:
*右结合性:a>b?a:i>j?i:j相当于a>b?a:(i>j?i:j)
*三目运算符中:表达式2和表达式3中如果都为基本数据类型,整个表达式的运算结果由容量高的决定。如:int x=4; x>4?99.9:9 ;,99.9为double类型,9为int类型。double容量高,所以结果为9.0。
7、运算符优先级:括号>自增自减>~!>算术运算符>位移运算>关系运算>逻辑运算>条件运算>赋值运算