六、关于java编程中运算符

         ——算术运算符
 +求和   - 相减   * 乘积   / 商   % 求余数【取模】   ++ 自加1   – 自减1【单目运算符(red色)】
1%num=0…1。1的余数永远为1
/商:公式是:(被除数-余数)÷除数=商,记作:被除数÷除数=商··· ···余数 ——除法

练习题:
数字XYZ,求:
个位数:Z
十位数:Y
百位数:X

个位数求法:% 10
十位数求法:/ 10 % 10
百位数求法:/ 100

关于求余数,符号正负问题:
int i1 = 2,i2 = -1;
System.out.println(i2 % i1);//-1
int i1 = 1,i2 = -2;
System.out.println(i1 % i2);//1
//结论求余数,正负号与被除数符号相同!

注:运算符之间有优先级,不确定的的时候加小括号,提高优先级。

System.out.println("5+5="+5+5);//输出结果为5+5=55
System.out.println("5+5="+(5+5));//输出结果为5+5=10

(一)++运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后,只要++运算结束,该变量中的值一定会自加1。(自加1——>自动加1)

(二)++出现在变量前——规则:先进行自加1运算,然后再进行赋值操作。
++出现在变量后——规则:先做赋值运算,再对变量中保存的值进行自加1。(- - 自减1,同理自学)变量1=++变量2 变量1=变量2++
(三)++或者- -运算,不会改变变量的数据类型。

//关于自增和自减的练习:
int i1 = 1;
int i2 = ++i1 + ++i1 * i1++;
System.out.println(i2);//11

int i1 = 1;
int i2 = ++i1 + (++i1 * i1++);
System.out.println(i2);//11
//目前来看,括号优先级虽然高,但是没有影响自增运算符,等后续学习虚拟机如何处理,再修改吧,虚竹哥的回答是,优先从左往右执行,再进行符号优先级比较。

对比题:
int i1 = 1;
int i2 = i1++;
System.out.println(i2);//1

int i = 1;
 i = i++;
System.out.println(i);//1,而不是2
//所以温馨提示:对于自增和自减建议直接使用:

变量名++;
//因为以分号结尾了所以与 ++变量名; 所达到的效果相同。
++变量名;
变量名--;
--变量名;

的形式,这样避免出现i = i++;
避免自己逻辑上的错误.

         ——关系运算符
大于 >    大于等于>=     小于 <     小于等于<=     等于 ==     不等于 !=
= 是赋值运算符 == 是关系运算符
(一)Java中不可以连续使用关系运算符,但是可以将逻辑运算符(&&)与关系运算符连续使用,达到预期效果。
(二)关系运算符的运算结果一定是布尔类型:true/false。
(三)关系运算符的运算原理:关系运算符进行比较的是值与值的大小。(java是模拟现实的,现实世界可以浮点型可以跟整数型比较大小,那么java中也是可以的)

double d = 1.0;
		int i = 1;
	System.out.println(d == i);//输出结果为true

         ——逻辑运算符
& 逻辑与【并且】(两边算子都是true,结果才为true) && 短路与
| 逻辑或【或者】 (两边算子只要有一个为true,结果就是true) || 短路或
! 逻辑非(取反,!false就是true,!true就是false,这是一个单目运算符)
^ 逻辑异或 (两边算子只要不一样,结果就是true)
逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型。
注:1.因为现实世界满足“…并且…并且…并且…并且…”这种现象,故Java语句中也适用,可以…&&…&&…&&…&&…等(用于需要同时满足)。
逻辑与和短路与、逻辑或和短路或 执行过程:
逻辑与和短路与:
        如果符号左边是true,则&、&&都会执行符号右边操作。
        如果符号左边是false,则&会继续执行符号右边操作。
                                            则&&不会执行符号右边操作。
逻辑或和短路或
       只要符号两边存在true,结果就为true。
        如果符号左边是true,则 | 会继续执行符号右边操作。
                                            则 || 不会执行符号右边操作。
推荐使用:&&和||,因为效率更高。

         ——赋值类运算符
*基本的赋值运算符
=
*扩展的赋值运算符
+=【追加】
-=【追减】
/=【追除】
*=【追乘】
%=【追取余】
赋值类运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量。
变量类型 变量名 = num;
变量名 += num1 ——>变量名 = (变量类型)(num+num1)
变量名 -= num2 ——>变量名 = (变量类型)(num-num1)
变量名 /= num3 ——>变量名 = (变量类型)(num/num1)
变量名 = num4 ——>变量名 = (变量类型)(numnum1)
变量名 %= num1 ——>变量名 = (变量类型)(num%num1)
结论:扩展的赋值运算符不改变运算结果类型。

byte b = 1;
    b += 1;
System.out.println(b);//输出结果为2    
//等同于 b = (byte)(b+1);

int i =1;
 i *=0.1;
System.out.println(i);//输出结果为0 
//等同于 i = (int)(i*0.1);

练习题:
如何实现自增2?
byte b = 1;
    b += 2;
判断题:
short s = 1;
    s += 1;//正常执行
    s = s+1;//编译报错

         ——三目运算符
语法结构:
布尔表达式 ?X : Y ;——>条件?结果1:结果2;
为真执行X,为假执行Y。
当 布尔表达式 ?X : Y ; 使用变量来接收的时候,X和Y需要是相同的类型或者能兼容的类型。

练习题:
获取三个整数的最大值
int i1 = 10;
int i2 = 20;
int i3 = 30;

int tempMax = i1 >= i2 ? i1 : i2;//tempMax临时最大值
int finalMax = tempMax >= i3 ? tempMax : i3;//finalMax最终最大值
System.out.println(finalMax);