JAVA数据运算

JAVA中对不同数据类型的数据进行计算操作。

计算方式

Java中数据计算方式包含:加、减、乘、数、取余、位运算、位移运算、自增/减

public static void main(String[] args) {  
    //加  
    int a=10,b = 20;  
    System.out.println(a+b);  
    //减  
    System.out.println(a-b);  
    //乘  
    System.out.println(a*b);  
    //除  
    System.out.println(b/a);  
    //取余  
    System.out.println(a%b);  
    //自增  
	System.out.println(a++); //先执行代码后增加; 
	System.out.println(++a); //先增加后执行代码;
	//自减  
	System.out.println(a--);  //先执行代码后减少;
	System.out.println(--a);  //先减少后执行代码; 
	//移位运算  
	System.out.println(a<<2);//转二进制左移两位 40
	System.out.println(a>>2);//转二进制右移两位 2
	//位运算  
	//逻辑与  
	System.out.println(0&1);//0  
	System.out.println(0&0);//0  
	System.out.println(1&1);//1  
	System.out.println(true&false);// false  
	System.out.println(true&true);// true  
	System.out.println(false&false);// false  
	//逻辑或  
	System.out.println(0|1);//1  
	System.out.println(0|0);//0  
	System.out.println(1|1);//1  
	System.out.println(true|false);// true  
	System.out.println(true|true);// true  
	System.out.println(false|false);// false  
	//逻辑非  
	System.out.println(~0);//-1  
	System.out.println(~1);//-2  
	//逻辑异或  
	System.out.println(0^1);//1  
	System.out.println(0^0);//0  
	System.out.println(1^1);//0  
	System.out.println(true^false);// true  
	System.out.println(true^true);// false  
	System.out.println(false^false);// false
}

移位运算

  1. 将数据转换为二进制数再根据 <<>> 确定对数据进行左移或者右移;
  2. 左移代表X2,右移代表÷2;
  3. <<<>>> 代表无符号的位运算,在对整型进行位移时也会把最高位的符号位进行移动,右移时高位补零负数回变成正数。^c9a0e8

运算优先级

在java计算中,不同计算符号对应优先级从高到底如下:

  • ()
  • ! ~ ++ --
  • * / %
  • + -
  • << >> >>>
  • &
  • |
  • += -= *= /=

类型自动提升与强制转型

在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,shortint计算,结果总是int,原因是short首先自动被转型为int

// 类型自动提升与强制转型
public class Main {
    public static void main(String[] args) {
        short s = 1234;
        int i = 123456;
        int x = s + i; // s自动转型为int
        short y = s + i; // 编译错误!
    }
}
 

也可以将结果强制转型,即将大范围的整数转型为小范围的整数。强制转型使用(类型),例如,将int强制转型为short

int i = 12345;
short s = (short) i; // 12345

要注意,超出范围的强制转型会得到错误的结果,原因是转型时,int的两个高位字节直接被扔掉,仅保留了低位的两个字节:

// 强制转型
public class Main {
    public static void main(String[] args) {
        int i1 = 1234567;
        short s1 = (short) i1; // -10617
        System.out.println(s1);
        int i2 = 12345678;
        short s2 = (short) i2; // 24910
        System.out.println(s2);
    }
}