7 运算符

7.1 赋值运算符

运算符 名称 用法 描述
= 赋值 int a = 3 ; 将 = 右边的值 赋值给 = 左边的变量

7.2 算术运算符

运算符 名称 用法 结果
+ 5 + 2 7
- 5-2 3
* 5*2 10
/ 5/2 2
% 取余 5%2 1

7.3 一元运算符

运算符 用法 描述
++ (先加)++x 或x++(先用) 自增1
-- (先减)--x或x--(先用) 自减1
a++表达式的值指的是自增之前的值
++a表达式的值指的是自增之后的值

7.4 关系(比较)运算符

运算符 名称 用法 结果(Boolean值)
> 大于 2>1 true
< 小于 2<1 false
>= 大于等于 2>=1 true
<= 小于等于 2<=1 flase
== 等于 2==1 false
!= 不等于 2!=1 true
(坑:double d1=0.1;
double d2=1-0.9; //d1!=d2
double d1=0.9;
double d2=1-0.1; //d1==d2

7.5 逻辑运算符(只能比较 boolean值,结果也为 boolean值)

运算符 名称 用法 描述 ( 结果(Boolean值) )
&& (短路)与 条件1 && 条件2 只要两个条件有一个为假,结果为假
& 条件1 & 条件2 只要两个条件有一个为假,结果为假
\ \ (短路)或 条件1\ \ 条件2 只要两个条件有一个为真,结果为真
\ 条件1\ 条件2 只要两个条件有一个为真,结果为真
! !条件 条件为真时,结果为假,反之亦然
^ 异或 条件1 ^ 条件2 两个条件结果相同时为假,不同为真

解释:短路

当 条件1 && 条件2 如果条件1为false,结果明显为false,所以条件2不会再判断。

当 条件1 & 条件2 如果条件1为false,结果明显为false,但条件2语句一样会被运算。

7.6 位运算符(2进制运算符)

运算符 名称 用法 描述
& 按位与 00001001&00001110 -> 00001000 按位比较,只要有0,则取0
\ 按位或 00001001\ 00001110 -> 00001111 按位比较,只要有1,则取1
^ 按位异或 00001001^00001110 -> 00000111 按位比较,相同取0,不同取1
~ 按位非 ~00000010 -> 11111101 对位取反
<< 左移 01000011 << 2 -> 00000110 每一位向左移动2位,右边补0,超出位数范围则舍去
>> 带符号右移 11111110 >> 2 -> 11111111 每一位向右移动2位,左边补符号位,超出位数范围则舍去
>>> 无符号右移 11111110 >>> 2 -> 00111111 每一位向右移动2位,左边补0,超出位数范围则舍去

经典案例1:用最快的速度计算2的3次方; 提示:使用<<

经典案例2:int a =1;int b =2;不借助第三个变量,交换两个数的值; 提示: 使用^

笔记:
位操作符:
  ~ 按位取反:每一个二进制位包括符号位取反

  & 按位与:每一位进行与,有一个0该位结果为0
           (应用://判断一个数的奇偶性:用该数与1进行&,
       就可以得到最后位为0或者1,为1是奇数,为0就是偶数)

  | 按位或:每一位进行或,有一个1该位结果为1

  ^ 按位异或:每一位进行异或,相同为0,不同为1
              a^0:还是a
          a^a:结果0
            (应用://交换两个变量的值:int a=3;int b=4;
               (1)效率最高
                    a=a^b; //a=3^4
                    b=a^b; //b=3^4^4=3
                    a=a^b; //a=3^4^3=4

                (2) 借助中间变量
                   int temp=a;
                   a=b;
                   b=temp;

                (3) 不借助中间变量
                   a=a+b;  //
                   b=a-b;  //b=7-4=3
                   a=a-b;  //a=7-3=4       
        )

       移位操作:Java会自动对移动的位数进行取余。
          int n=1<<32;----> n=1;   //int 类型进行32取余
  long    //long类型进行64取余
  byte n=1<<8;----> n=2^8  //因为8默认为int,则n也会自动转为int,所以还是进行32取余

      << 左移:每一位左移,高位溢出,低位补零(左移n位,该数乘以2^n)
          //计算2^3的最快方式:1<<3

  >> 带符号右移:每一位右移,低位溢出,高位补符号位(右移n位,该数除以2^n)
                //应用:125获取他的倒数第三个二进制位:【(125>>2)&1】

  >>> 无符号右移:每一位右移,低位溢出,高位补0

7.7 三目(三元)运算符

运算符 名称
?
: 否则

用法:

  • zhangSanScore > 98 ? "奖励Iphone 8 " : "没有任何奖励" ;

  • 语法解释:张三的成绩大于98吗?如果大于"奖励Iphone 8 ",否则"没有任何奖励";

7.8 字符串连接运算符

运算符 名称 用法 结果
+ 字符串追加 String s="张三"+"是个男孩"; s -> 张三是个男孩

注:只要+的两端有一端是字符串,则这个时候+就变成了字符串连接符

7.9 运算符优先级

优先级 运算符 结合性
1 ()[]. 从左到右
2 !+(正) -(负)~++-- 从右向左
3 */% 从左向右
4 +(加)-(减) 从左向右
5 <<>>>>> 从左向右
6 <<=>>=instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 \ 从左向右
11 && 从左向右
12 \ \ 从左向右
13 ?: 从右向左
14 =+=-=*=/=%=&=\ =^= ~= <<=>>=>>>= 从右向左

注:只需要知道 () 的优先级是最高的,其他的不需要记,当运算表达式比较复杂,不能确定运算顺序的时候,可以添加括号 () 控制执行顺序。

7.10 转义字符

符号 效果
\n 换行
\t 制表符号
\' 输入单引号 "
\" 输入双引号 '
\ 输入反斜杠 \

results matching ""

    No results matching ""