栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

javaSE07-运算

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javaSE07-运算

avaSE07-运算 1.运算符

​ 运算符是一种特殊的符号,用以表示数据的运算、赋值,比较等。

2. 二元运算符 2.1加减乘除(+ - * /)
public class Operator {
    public static void main(String[] args) {
        //二元运算符
        int a = 10;
        int b = 15;
        int c = 20;
        int d = 25;
        double d1 = 10/4; //计算结果先为int 取2,然后转换为double类型取2.0

        System.out.println(a+b); // 25
        System.out.println(a-b); // -5
        System.out.println(a*b); // 150
        //System.out.println(a/b);   0 结果为int,数据取整为0
        System.out.println(a/(double)b); //0.666
        System.out.println(d1); // 2.0   计算结果先为int 取2,然后转换为double类型取2.0

    }
}

​ 如果运算数据中存在long类型,那么运算结果也为long类型,其余为int;如果运算数据中存在double类型,那么运算结果也为double类型。

public class Operator {
    public static void main(String[] args) {
        long a = 123456789L;
        int b = 123;
        short c = 10;
        byte d = 8;

        System.out.println(a+b+c+d); // 123456930 long类型
        System.out.println(b+c+d); // 141 int
        System.out.println(c+d); // 18 int
        // 如果运算数据中存在long类型,那么运算结果也为long类型,其余为int

        System.out.println((double)c+d); // 18.0 double


        System.out.println("=================================================");

        double e = 10.2;
        long f = 123L;

        System.out.println(f+b+c+d+e); // 274.2 double类型
        System.out.println(b+c+d+e); // 151.2 double
        System.out.println(c+d+e); // 28.2 double
        System.out.println(d+e); // 18.2 double
        // 如果运算数据中存在double类型,那么运算结果也为double类型

    }
}

2.2 模运算(%)
public class Operator {
    public static void main(String[] args) {
        //% 模运算,即取余数
        //% 模运算的本质即一个公式:a % b = a - a / b * b        
        int a = 10;
        int b = 20;
        int c = 23;
        System.out.println(c%a);// 3  23/10=2...3 ===> 23/10=23-23/10*10=23-20=3
        System.out.println(c%b);// 3  23/20=1...3
        System.out.println(c%c);// 0  23/23=1...0
        
        //% 当 a 是小数时 模运算的本质即一个公式:a % b = a - (int)a / b * b
        
        System.out.println(-10.5%3); // -1.5 的近似值  有小数运算,得到的结果是近似值
         
        
    }
}

3. 一元运算 自增(++)、自减(–)

​ 自增(++)、自减(–)作为独立的语句使用,i++ 和 ++i 都完全等价与 i = i + 1; 作为表达式使用时:

​ i++ 表示:先赋值后自增;

​ ++i 表示:先自增后赋值;

​ 例:

public class Operator {
    public static void main(String[] args) {
        // 一元运算
        //++  自增 a++即为 a=a+1
        //--  自减 a--即为 a=a-1

        int a = 3;

        System.out.println(a); // 3
        
        //a++ 先赋值,再自加
        int b = a++; // 先赋值,此时b=3,再自加,此时a=4
        

        System.out.println(a); // a=4
        
        //a++ 先自加,再赋值
        int c = ++a; // 先自加,此时 a=5,再赋值给c,此时c=5   
        System.out.println(a); // a=5

        System.out.println(a); // 5
        System.out.println(b); // 3
        System.out.println(c); // 5
    }
}

​ 分析如下:

4.关系运算符
  • ​ 4.1 关系运算符返回的结果为Boolean类型:true、false ,经常与if语句一同使用。
  • ​ 4.2 关系运算符组成的表达式称为关系表达式,例a>b。
  • ​ 4.3 比较运算符为"==“,不能写为”="。
public class Operator {
    public static void main(String[] args) {
		int a = 10;
        int b = 20;
        int c = 23;

        System.out.println(a>b); //false
        System.out.println(a=b); //false
        System.out.println(a<=b); //true
        System.out.println(a!=b);// true 不等于
    }
}

        
5.逻辑运算符
  • ​ 5.1 逻辑运算符用于连接多个条件(多个表达式),最终的结果也是一个Boolean值;

  • ​ 5.2 常用的逻辑运算符为: && (短路与) ||(短路或) !非(取反)
    & (逻辑与) | (逻辑或) ^ (逻辑异或) ~ (逻辑取反)

    ​

public class LogicOperator {
    public static void main(String[] args) {

        //and(与)  or(或)     非 (取反)
        //&&       ||        !

        boolean a = true;
        boolean b = false;

        System.out.println("a&&b:"+(a&&b)); //     false  逻辑与运算:真真为真;
        System.out.println("a||b:"+(a||b)); //     true   逻辑与运算:遇真为真;
        System.out.println("!(a&&b:)"+!(a&&b)); // true   逻辑与运算:变假为真,变真为假;


        System.out.println("==========================");
        //短路运算
        int c = 5;
        boolean d = (c<4)&&(c++<4);

        System.out.println(d); // false 错误后&&后面的代码不再执行
        //对于短路与而言,第一个条件为false,后面的代码便不会执行。
        System.out.println(c); // 5
        
        // &  |  ^  ~  
        
        int i = 5;
        boolean l = (i<4)&(++i<4); //false 错误后&后面的代码仍然会执行并判断
        
        System.out.println(i);//  6  
        //对于逻辑与而言,第一个条件为false,后面的代码仍会执行。
        
        //开发过程中基本上使用短路与&&,效率较高;短路或、逻辑或同理

        


    }
}

  • ​ 5.3 练习01
public class Operator {
    public static void main(String[] args) {
       //练习01
       int x = 5;
       int y = 5;
       if(x++ == 6 & ++y == 6){
           
           x = 11;
       }
       System.out.println("x=" + x,"y=" + y); // x = 6,y = 6;
       
              
    }
}

  • 5.4 练习02
public class Operator {
    public static void main(String[] args) {
       //练习02
       int x = 5;
       int y = 5;
       if(x++ == 6 && ++y == 6){
           
           x = 11;
       }
       System.out.println("x=" + x,"y=" + y); // x = 6,y = 5;
       
        
    }
}
  • 5.4 练习03
public class Operator {
    public static void main(String[] args) {
       //练习03
       int x = 5;
       int y = 5;
       if(x++ == 5 | ++y == 5){
           
           x = 11;
       }
       System.out.println("x=" + x,"y=" + y); // x = 11,y = 6;
      
        
    }
}
  • 5.4 练习04
public class Operator {
    public static void main(String[] args) {
       //练习04
       int x = 5;
       int y = 5;
       if(x++ == 5 || ++y == 5){
           
           x = 11;
       }
       System.out.println("x=" + x,"y=" + y); // x = 11,y = 5;
      
        
    }
}
  • 5.5 练习05
public class Operator {
    public static void main(String[] args) {
       //练习05
       boolean x = true;
       boolean y = false;
       short z = 46;
       if(z++ == 46 && y = true){
          z++;
       }
       if(x = false || ++z == 49){
          z++;
       }       
       System.out.println("z=" + z); // z = 50;
      
      
        
      //经测试:赋值语句作为判断条件时,赋值后的布尔变量作判断条件,也就是返回左值。
    }
}
6.位运算符(含重点) 6.1位运算 <<(算术左移) >>(算术右移) >>>(逻辑右移) 6.1.1 <<(算术左移)

​ 运算规则:符号位不变,低位补0。

6.1.2 >>(算术右移)

​ 运算规则:低位溢出,符号位不变,并用符号位补溢出的高位。

6.1.3 >>>(逻辑右移) 也叫无符号右移

​ 运算规则:低位溢出,高位补0。

6.1.4 特殊说明,没有 <<< 符号
public class BitOperator {
    public static void main(String[] args) {
       
        int a = 1 >> 2;//  1 向右位移 2位  相当于 1 /2 /2 
        int b = 1 << 2;//  1 向左位移 2位  相当于 1 *2 *2
        int c = 15>> 2;//  15向左位移 2位  相当于 15/2 /2 
        int d = 4 << 2;//  4 向左位移 2位  相当于 4 *2 *2


        System.out.println(2<<3); // 16          
        
                
    }

}
6.2 ~ (按位取反) & (按位与) |(按位或) ^ (按位异或)

例:

public class BitOperator {
    public static void main(String[] args) {
 		A = 0011 1100
        B = 0000 1101

        A & B = 0000 1100	// 按位与,A、B每一位数均为1取1,否则取0,真真为真 
        A | B = 0011 1101	// 按位或,A、B每一位数均为0取0,否则取1,假假为假
        A ^ B = 0011 0001  	// 按位异或,A、B每一位数相同为0,不同为1
          ~ B = 1111 0010   // 按位取反,每一位数都与B完全相反  (0变1,1变0)        
        
                
    }

}
6.3 原码、反码、补码(重点) 6.3.1 运算规则:

​ 对于有符号的数而言:

  • ​ 1.二进制的最高位是符号位: 0表示正数,1表示负数。
  • ​ 2.正数的原码、反码、补码是一样的。(三码合一)
  • ​ 3.负数的反码 = 它的原码符号位不变,其他位取反。(符号位不变,0变1,1变0)
  • ​ 4.负数的补码 = 它的反码 + 1。(负数的反码 = 负数的补码 - 1)
  • ​ 5.0的反码、补码都是0。
  • ​ 6.java没有无符号数,换言之,java中的数都是有符号的。(数据有符号)
  • ​ 7.在计算机运算的时候,都是以补码的形式来运算的。(运算用补码,补码是为了将正数、负数统一起来)
  • ​ 8.当我们查看运算结果的时候,应该查看它的原码。(结果看原码)
6.3.2 案例解析
public class BitOperator {
    public static void main(String[] args) {
              
        // 01  2&3
        System.out.println(2&3); // 2
        
             

        
        
        
        // 02  ~-2
        System.out.println(~-2); // 1
        
        
        
        
        
        
        
        
        // 02  ~2
        System.out.println(~-2); // -3
          
        
    }

}
7 三元运算符
  • ​ 7.1 基本语法:条件表达式?表达式1:表达式2;
  • ​ 7.2 如果条件表达式的结果为true,那么运算后的结果为表达式1;如果条件表达式的结果为false,那么运算后的结果为表达式2。
  • ​ 7.3 表达式1和表达式2应为可以赋值给接受变量的值或者类型(或者可以自动转换、或者进行强制转换)。
  • ​7.4 三元运算符可以转换为if-else语句。
  • ​ 7.5 例:
public class TernaryOperator {
    public static void main(String[] args) {
        
        //三元运算符
        //x ? y : z
        //如果 x==true,则结果为y,否则结果为z
        //必须掌握

        int socre = 80;
        String type = socre < 60 ? "不及格" : "及格";
        System.out.println(type); // 及格
        //可以转换为if 语句
        
        int a = 10;
        int b = 99;
        int result = a > b ? a++ :--b ; 
        System.out.println(result); // 98 
    }
}

  • ​ 7.6 练习
public class TernaryOperator {
    public static void main(String[] args) {
        
       //实现三个数中的最大值
       int num1 = 10;
       int num2 = 50;
       int num3 = 40;// 定义三个数值。
        
       int max1 = num1 >= num2 ? num1 : num2; 
       int max2= num2 >= num3 ? num2 : num3;  // 两两进行比较,选出较大的两个值。
       
       int max3= max1 >= max2 ? max1 : max2; // 较大的值进行比较,选出最大的值。
       System.out.println("最大值为:"+max3); // 50

    }
}
8 赋值运算符
  • ​ 8.1 赋值运算符就是将某个运算后的值赋给制定的变量。
  • ​ 8.2 基本赋值运算符为 " = ",例: int i = 10;
  • ​ 8.3 复合赋值运算符为 " += "、 " -= "、 " *= "、 " /= "。
  • ​ 8.4 以 " += " 、" -= "为例进行说明:
public class AssignOperator {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a+=b; // 等价于a = a+b; 10+20=30
        a-=b; // 等价于a = a-b; 30-20=10

        //字符串连接符 +
        System.out.println(a+b); //30  10+20
        System.out.println(""+a+b); // 1020   10与20拼接   如果前面有字符串,运算时会自动把后面的转化为字符串
        System.out.println(a+b+""); // 30     10+20 再拼接
                       

    }
}

  • ​ 8.5 赋值运算的特点:

8.5.1 赋值运算的运算顺序为从右往左,即先计算 " = "右边的运算,然后再赋值给 " = "左边的变量。

8.5.2 赋值运算" = "的左边只能是变量,右边可以是变量、表达式、常量值。

8.5.3 复合赋值运算符会进行类型的转换,例:

public class AssignOperator {
    public static void main(String[] args) {
        byte b = 3;
        //自动进行类型转换
        b += 2;//等价于 b =(byte)(b+2);运算结果类型为byte。
        b++;   //等价于 b =(byte)(b+1);
        
        //常规情况
        b = b + 2;// 运行报错,2为int类型,b+2结果为int类型,无法自动转换为byte类型。
        

        //字符串连接符 +
        System.out.println(a+b); //30  10+20
        System.out.println(""+a+b); // 1020   10与20拼接   如果前面有字符串,运算时会自动把后面的转化为字符串
        System.out.println(a+b+""); // 30     10+20 再拼接
                       

    }
}

9 运算符优先级
  • ​ 9.1 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
  • ​ 9.2 只有单目运算(一元)、赋值运算是从右向左运算的。
  • ​ 9.3 优先级排序(由上到下,由高到低)
. () {} ; ,备注
自右向左++、–、~、!(data type)
自左向右*、/、%
自左向右+、-
自左向右<<、>>、>>> 位移
自左向右<、>、<=、>=、instance of
自左向右==、!=
自左向右&
自左向右^
自左向右|
自左向右&&
自左向右||
自左向右? : ;
自左向右=、*=、/=、%=
自左向右+=、-=、<<=、>>=
自左向右>>>=、&=、^=、|=
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940610.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号