运算符

132 阅读2分钟

1. 算术运算符

int a = 3;
int b = 2;

//模运算  结果应该是1(取余数)--------除法和取模右操作数不可为零
System.out.println(a % b);

// 在数学中应该是1.5 但是在Java中输出结果为1 会向下取整,即小数点之后全部舍弃掉了
System.out.println(a / b);

// 如果要得到数学中的结果,可以使用如下方式
double d = a*1.0 / b;

//两侧操作数大的时候像大的方向提升
System.out.println(d);
System.out.println(1+0.2); // +的左侧是int,右侧是double,在加之前int被提升为double
// 故:输出1.2

2. 自增,自减

++是给变量的值+1,--是给变量的值-1。

int a = 1;
a++; // 后置++ 表示给a的值加1,此时a的值为2
System.out.println(a++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a); // 输出3
++a; // 前置++ 表示给a的值加1
System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5
// --操作符给操作-1,与++含义类似

3. 逻辑运算符

逻辑运算符有以下三种(结果为boolean类型)---> 结果只有 true 或 false:

&& ----- 有假就假,都为真才为真 (串联)

|| ----- 有真就为真           (并联)

!  ----- 取反

//短路求值(左边够用了就不要右边的语句了)
// 打印 false,如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
System.out.println(10 > 20 && 10 / 0 == 0); 

// 打印 true,如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
System.out.println(10 < 20 || 10 / 0 == 0); 

4. 位运算符

按位与 & ----- 都为1才为1 (串联)

按位或 || ----- 有1就为1  (并联)

按位异或 ^  ----- 相同为0,不同为1
    
按位取反 ~  ----- 0110

5. 移位运算符(了解)

左移: <<  (左边移掉,右边加0 --> 乘法) ------ 0000 1011 << 1 = 0001 0110  11*2^1 
                                    ------ 0000 1011 << 2 = 0010 1100  11*2^2  

右移 : >> (右边移掉,左边补符号位)------ 0000 1011 >> 1 = 0000 0101  5    11/2^1
                              ------ 0000 1011 >> 2 = 0000 0010  2    11/2^2

  -1 ---> 1111 1111 >> 1 = 1111 1111
    
          1111 1111 >>> 1 = 0111 1111 (>>>:无符号右移)

7. 条件运算符(三目运算符)

表达式1(必须为布尔表达式) ?表达式2:表达式3 --->> 若表达式1为真,则执行表达式1,否则执行表达式2

// 求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;

8. 运算符优先级

img

口诀:单算移关与,异或逻条赋