2.4运算符

算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三元运算符

2.4.1算数运算符

% 取余
++ 自增(前):先运算后取值
++ 自增(后):先取值后运算
-- 自减(前):先运算后取值
-- 自减(后):先取值后运算

  • 字符串连接,正好,加
    ```
    /*运算符之一:算数运算符
      • / ++ --

*/
class AriTest {

public static void main(String[] args) {

    //除号:/
    int num1 = 12;
    int num2 = 5;
    int result = num1 / num2;
    System.out.println(result);//2

    int result2 = num1 / num2 * num2;
    System.out.println(result2);//10

    double result3 = num1 / num2;
    System.out.println(result3);//2.0

    double result4 = num1 / (num2 + 0.0);
    System.out.println(result4);

    double result5 = (double)num1/num2;


    // %:取余运算
    //结果的符号与被模数的符号相同
    //开发中,经常使用%来判断能否被除尽的情况
    int m1 = 12;
    int n1 = 5;
    System.out.println("m1 % n1 = " + m1 % n1);

    int m2 = -12;
    int n2 = 5;
    System.out.println("m2 % n2 = " + m2 % n2);

    int m3 = 12;
    int n3 = -5;
    System.out.println("m3 % n3 = " + m3 % n3);

    int m4 = -12;
    int n4 = -5;
    System.out.println("m4 % n4 = " + m4 % n4);

    //(前)++ :先自增1,然后再运算
    //(后)++ :先运算,再自增1
    int a1 = 10;
    int b1 = ++a1;
    System.out.println("a1 = " + a1 + ",b1 = " +b1);

    int a2 = 10;
    int b2 = a2++;
    System.out.println("a2 = " + a2 + ",b2 = " +b2);

    int a3 = 10;
    a3++;
    int b3 = a3;

    //注意点:
    short s1 = 10;
    //s1 = s1 + 1; 编译失败
    //s1 = (short)(s1 + 1);正确的
    s1++;//自增1不会改变本身变量的数据类型

    //问题:
    byte bb1 = 127;
    bb1++;
    System.out.println("bb1 = " + bb1);

    //(前)--:先自减1后运算
    //(后)--:先运算后自减1

    int a4 = 10;
    int b4 = --a4;
    System.out.println("a4 = " + a4 + ",b4 = " + b4);


}

}

测试小题

/*
随机给出一个三位数整数,打印显示它的个位数,十位数,百位数的值
格式如下:
数字×××的情况如下:
个位数:
十位数:
百位数:
*/
class AriExer {

public static void main(String[] args) {

    int num = 187;

    int bai = num/100;
    int shi = num % 100 / 10;//int shi = num / 10 % 10;
    int ge = num % 10;
    System.out.println("百位为:" + bai);
    System.out.println("十位为:" + shi);
    System.out.println("个位为:" + ge);
}

}

## 2.4.2 运算符:赋值运算符
符号 =

## 2.4.3比较运算符

运算符之二:赋值运算符
= += -= *= /= %=

*/
class SetValueTest {

public static void main(String[] args) {
    //赋值符号
    int i1 = 10;
    int j1 = 10;

    int i2,j2;
    //连续赋值
    i2 = j2 = 10;

    int i3 = 10,j3 = 20;

    //*******************
    int num1 = 10;
    num1 += 2;// num1 = num1 + 2;
    System.out.println(num1);//12

    int num2 = 12;
    num2 %= 5;//num2 % 5;
    System.out.println(num2);

    short s1 =10;
    //s1 = s1 + 2;//编译失败
    s1 +=2;//不会改变变量本身的数据类型



    //开发中,如果希望变量实现+2的操作,有几种方法 int num = 10;
    //方式一:num = num + 2
    //方式二:num += 2(推荐)
##2.4.4 逻辑运算符
运算符之三:比较运算符
== != > < >= <= instanceof

结论:
1.比较运算符的结果是boolean类型
2.区分 == 和 = 

/*
运算符之四:逻辑运算符

& && | || ! ^

说明:
1.逻辑运算符操作的都是boolean类型的变量

*/
class LogicTest {

public static void main(String[] args) {

    //区分& 与 &&(与)
    //相同点1:&与&&运算结果相同
    //相同点2:当符号左边是true时,二者都会执行符号右边的运算
    //不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再执行符号右边的运算
    boolean b1 =true;
    b1 = false;
    int num1 = 10;
    if (b1 & (num1++ > 0)){
        System.out.println("我现在在北京");
    }else{
        System.out.println("我现在在南京");
    }
        System.out.println("num1 = " + num1);

    boolean b2 =true;
    b2 = false;
    int num2 = 10;
    if (b2 && (num2++ > 0)){
        System.out.println("我现在在北京");
    }
    else{
        System.out.println("我现在在南京");
    }
        System.out.println("num2 = " + num2);

    //区分:|与||(或)
    //相同点1:|与||运算结果相同
    //相同点2:当符号左边是false时,两者都会执行符号右边的运算
    //不同点:当符号左边时true时,|会继续执行右边的运算,||不执行
    //开发中推荐使用||
    boolean b3 = false;
    b3 = true;
    int num3 = 10;
    if (b3 | (num3++ > 0)){
        System.out.println("我现在在北京");    
    }else{
        System.out.println("我现在在南京");
    }
    System.out.println("num3 = " + num3);

    boolean b4 = false;
    b4 = true;
    int num4 = 10;
    if (b4 || (num4++ > 0)){
        System.out.println("我现在在北京");    
    }else{
        System.out.println("我现在在南京");
    }
    System.out.println("num4 = " + num4);




}

}

2.4.5位运算符


<<左移 左移一位 *2
>>右移
>>>无符号右移  无论正负,右移后都补0
&与运算
|或运算
^异或运算
~取反运算

1.位运算符操作的都是整型的数据
2.“<<”在一定范围内,每向左移一位,相当于 * 2,"<<"每向右移一位,相当于 / 2
面试题:最高效的计算2*8? 2<<3 或8<<1
3.m = (m ^ n) ^ n

2.4.6 三元运算符

/*
运算符之六:三元运算符
1.结构:(条件表达式)?表达式1:表达式2
2.说明
①条件表达式的结果为一个布尔类型变量
②根据条件表达式的真或假决定执行表达式1还是2
 如果表达式为true,则执行表达式1
 如果表达式为false,则实行表达式2
③表达式1和表达式2要求是一致的
④三元运算符可以嵌套使用

3.凡是可以使用三元运算符的地方,都可以改写为if-else
反之,不成立

4.如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符,原因:简洁,执行效率高
*/
class SanYuanTest 
{
    public static void main(String[] args) 
    {
        //获取两个整数的较大值
        int m = 12;
        int n = 5;
        int max = (m > n) ? m : n ;
        System.out.println(max);

        double num = (m > n)?2:1.0;

        //******************
        String maxStr = (m > n)?"m大":((m == n)?"m和n相等":"n大");
        System.out.println(maxStr);

        //*************
        //获取三个数的最大值
        int n1 = 12;
        int n2 = 30;
        int n3 = -43;

        int max1 = (n1 > n2)?n1:n2;
        int max2 = (max1 > n3)?max1 : n3;
        System.out.println("三个数的最大值为:" + max2);



    }
}

2.5 程序流程控制

顺序结构
程序从上到下逐行执行
分支结构
循环结构

2.5.1 if-else

/*
分支结构中的if-else(条件判断结构中)
一、三种结构
第一种:
if(条件表达式){
    执行表达式
}
第二种:
if(条件表达式){
    执行表达式1
}else{
    执行表达式2

}
第三种:n选一
if(条件表达式){
    执行表达式1
}else if{
    执行表达式2
}else if{
    执行表达式3
}
.....
else{
    执行表达式n

}

*/
class IfTest{
    public static void main(String[] args) {
        //举例1
        int heartBeats = 79;
        if (heartBeats < 60 || heartBeats > 100){
        System.out.println("需要做进一步检查");
        }
        System.out.println("检查结束");

        //举例2
        int age = 23;
        if(age < 18){
            System.out.println("你可以多看点动画片");
        }else {
            System.out.println("1111111");
        }
        //举例3
        if(age < 0){
            System.out.println("您输入的数据非法");
        }else if(age < 18){
            System.out.println("青少年时期");
        }else if (age < 35){
            System.out.println("青壮年时期");
        }else if (age < 60){
            System.out.println("中年时期");
        }else if (age < 120){
            System.out.println("老年时期");
        }else{
            System.out.println("成仙");
        }
    }    
}