Java语言基础-04-运算符

445 阅读4分钟

啥是运算符?就是告诉大家,java编程语言中咋做加减乘除等运算的。你写一个加号,java认不认识这是加号啊。诸如此类 到底用 什么符号 表示 各个变量之间的数学或逻辑关系,就是本文的内容。

是不是看到这就觉得很枯燥了?本来想学new 对象的。结果学着学着,学成数学了。头大。

和前一篇文章一样,这些简单枯燥且会伴随你整个职业生涯的的内容,我们就快速带过了。

算数运算符

加减乘数等计算运算符

+ - * /除法 %求余数 ++ --

public static void main(String[] args) {
	int num1 = 10,num2 = 5;
	int result;
	result = num1 + num2;
	System.out.println(num1+"+"+num2+"="+result);
	System.out.println(num1+num2); //相加
	System.out.println(""+num1+num2);//字符串连接
        
        //参与 / 运算的两个操作数都是整数,就是整数除法,否则都是浮点数除法
        
    	System.out.println(13/5); //2
	System.out.println(13.0/5); //2.6
  	System.out.println(13%5); //3
    	System.out.println(-13%5);//-3
    	System.out.println(-13%-5);//-3
    	System.out.println(13%-5);//3
	System.out.println(13.0%5); //3.0
	System.out.println(13.5%5); //3.5
        System.out.println(13.5%0); //NaN
        
}

赋值运算符

把一个值,付给一个变量。
= 从右往左运算,左边是一个变量
int n = 5
+=,-= ,*=,/=等等

关系运算符

用于判断大于,小于,等于不等于 等等这些运算符。字符之间进行比较时,比较的是ASSIC码值
== !=
> >=
< <=

逻辑运算符

⚠️:逻辑运算符,操作的都是布尔类型,用于逻辑判断,这是区分逻辑运算符和位运算符的关键点。

逻辑运算符连接一个或多个条件,判断这些条件是否成立

逻辑运算符的结果是布尔类型

  • 与运算:逻辑& , 短路&&
  • 或运算:逻辑|,短路||
  • 非运算:!
  • 异或:^ (不同为true,相同为false)

&&和单&的区别:
双 表示短路逻辑运算符

	public static void main(String[] args) {
		int n = 3;
		boolean b = (3>7)&(n++<2);
		System.out.println("b="+b+" n="+n);
		//先算3>7为false
		//再算n<2为false
		//n++,n=4
		//输出,b = false,n=4

		int nn = 3;
		boolean bb = (3>7)&&(nn++<2);
		System.out.println("bb="+bb+" nn="+nn);
		//先算3>7为false
		//由于前面的逻辑判断足够了,不需要后面再进行计算了
		//输出,bb = false,nn=3
	}

条件运算符

java中条件运算符是三目运算符
布尔表达式?结果表达式1:结果表达式2
当布尔表达式为真时,返回表达式1,否则,返回表达式2

位运算符

⚠️:位运算符操作的都是数值类型,这是区分位运算符合逻辑运算符的关键点。

基于Bit进行运算的运算符,在二进制补码基础上直接运算,运算效率高,可读性差。

左移运算<<

4<<3:4的二进制左移3位
00000100 
00100000
相当于,4 * 2^3 = 32
@Test
public void test0b(){
    int a = 0b00000100;
    System.out.println(a); //4
    a=a<<3;
    System.out.println(a); //32
}

右移运算>>

32>>4:32的二进制右移4位
00100000
00000010
相当于,32 / 2^4 = 2

-32>>4:-32的二进制右移4位
原码:10100000
反码:11011111
补码:11100000
右移4位(补1)
补码:11111110
反码:11111101
原码:10000010
结果等于 -2 

无符号右移>>>

不管符号位,左边全补0
-32>>>4:-32的二进制无符号右移4位
原码:10000000 00000000 00000000 00100000
反码:11111111 11111111 11111111 11011111
补码:11111111 11111111 11111111 11100000
右移:00001111 11111111 11111111 11111110
最高位是0 是整数,直接算出结果 

按位与&
按位或|
按位异或^
按位取反~

//交换两个变量的值
public class ChangeValue {
    public static void main(String[] args) {
        //利用运算符交换两个变量的值(抛砖引玉)
        int num1 = 10;
        int num2 = 20;
//        num1 = num1 + num2; // num1= 全部的和   num2 = num2
//        num2 = num1 - num2; // 全部的和 -num2 = num1  付给了 num2。num2就是原来的num1了
//        num1 = num1 - num2;//全部的和 - num2(原来的num1) = 原来的num2
//        System.out.println(num1);
//        System.out.println(num2);

        //思想类似,利用位运算符交换两个变量的值(我是玉)
      	//num1 根据num2 变成了一个中间值	00001010 ^ 00010100 
        num1 = num1 ^ num2;
        //num1 根据num2 又变回了原来的值 但是结果付给了num2 此时 num2为num1原来的值
        num2 = num1 ^ num2;
        //以前: num1 根据 num2 得到 中间值。现在:中间值 根据 num1 得到num2  付给 num1
        num1 = num1 ^ num2;     
    }
}

运算符优先级

数字越大,优先级越大。9>8>7>6>5>4>3>2>1

运算符说明优先级
()小括号9
!、++、--逻辑非、自增、自减8
*、/、%乘法、除法、取余7
+、-加法、减法6
<、<=、>、>=小于、小于等于、大于、大于等于5
==、!=等于、不等于4
&&逻辑与3
||逻辑或2
=、+=、-=各种赋值运算符1

不用背诵这个表。只要记住,()优先级最大,乘除大于加减 赋值优先级最低。基本就不影响你写代码了。其他的,心里有个数就行,用到的时候再百度就好了