运算符

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

算数运算符

值得注意的问题

  • 如果对负数取模,可以把模数负号忽略不计,但被模数是负数则不可忽略。

    System.out.println(5 % 2);    //输出结果是:1
    System.out.println(5 % -2);    //输出结果是:1
    
    System.out.println(-5 % 2);    //输出结果是:-1
  • 对于除号“/”,他的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。

    int x = 3510;
    x = x / 1000 * 1000;
    System.out.println(x);
    //x的结果是?3000
  • “+”除了字符串相加功能外,还能把非字符串转换成字符串。

    System.out.println("5+5=" + 5 + 5);
    //打印的结果是?5+5=55
  • 以下两者的区别:

    //char类型数据是可以做数学运算的,在做数学运算的时候把字符转化为ASCII码进行计算
    System.out.println('*' + '\t' + '*');
    //打印的结果是?93
    
    //字符串与其他数据类型相加时,实际上是把其他的数据转换为字符串,做字符串的拼接
    System.out.println("*" + '\t' + '*');
    //打印的结果是?*    *

赋值运算符

  • 符号:=

    • 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理

      int i = 1;
      short s = 2;
      
      i = s;    //自动类型转换
      s = (short)i;    //强制类型转换
    • 支持连续赋值

      int i0 = 0;
      int i1 = 0;
      int i2 = 0;
      
      i0 = i1 = i2 = 1;
      
      System.out.println(i0 + "," + i1 + "," + i2);
      //输出的结果是?1,1,1
  • 扩展赋值运算符:+=、-=、*=、/=、%=

    int i = 1;
    i += 2;    //相当于i = i + 2;
    System.out.println(i);
    
    String str = "he";
    str += "llo";    //字符串也可以做+=运算,字符串的+=是字符串的拼接
    System.out.println(str);    //输出的结果是?hello
  • 思考问题?

    1. short s = 3; s = s + 2;① s += 2;② ①和②有什么区别?

      short s = 3;
      
      s = (short)(s + 2);    
      /*        //s = s + 2;这样写会报错。
      变量参与运算的时候,Java程序不知道具体的这个变量在做完运算后
      会不会超出当前变量的范围,所以会先把变量转换为一个更大的长度。
      这里short是一个短整型数据,会转化为默认的int类型
      */
      
      s += 2;    //在使用扩展赋值运算符时,变量在参与运算时会把结果自动强制转换为当前变量的类型
    2. Int i = 1; i *= 0.1; System.out.println(i); i++; System.out.println(i);

      int i = 1;
      
      i *= 0.1;    //相当于 i = (int)(i * 0.1);
      System.out.println(i);    //输出的结果是?0
      i++;
      System.out.println(i);    //输出的结果是?1

比较运算符

  • 比较运算符的结果都是boolean型,也好就是要么是true,要么是false。
  • 比较运算符 “==” 不能误写成 “=”。

逻辑运算符

  • 逻辑运算符用于连接布尔型表达式时,在Java中不可以写成 3<x<6,应该写成 x>3 & x<6。
  • “&” 和 “&&” 的区别:

    • 单&时,左边无论真假,右边都进行运算;
    • 双&时,如果左边为真,右边参与计算;如果左边为假,那么右边不参与计算。
  • “|” 和 “||” 的区别同理。||表示:当左边为真时,右边不参与计算。
  • 异或 “^” 和或 “|” 的不同之处是:当左右都为 true 时,结果为 false。

理解思路:异或,追求的是“异”,异的时候才为真。

位运算符

  • 位运算是直接对二进制进行计算

    • 计算机中如何用二进制表示一个负数?
    • 正数二进制 → 反码 → 加1(补码)→ 负数二进制
    • 负数二进制 → 减1 → 反码 → 原码 → 正数二进制
  • 反码运算

    • ~运算,就是把二进制的同位翻转,也就是把1变0,把0变1。
  • 左移运算和右移运算

    • 左移1位相当于乘2,m << n → m * 2的n次方。
    • 右移1位相当于除2取商,m >> n → m / 2的n次方。
  • 按位与,按位或,按位异或

    • 同位&运算时,位数都是1结果为1,否则为0。
    • 同位|运算时,位数都是0结果为0,否则为1。
    • 同位^运算时,位数都是1或者都是0,结果为0,否则为1。
  • 雷区:

    • &和|既是逻辑运算符,又是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数都是整数类型,就是位运算符。
    • 不要把 “^” 当做数学运算 “乘方”,这是 “位的异或” 操作。

三元运算符

格式:

条件表达式 ? 表达式1 : 表达式2;

​ 条件表达式为 true,运算后的结果是表达式1;

​ 条件表达式为 false,运算后的结果是表达式2。

int i = -1;
int k = i > 0 ? 1 : 0;
System.out.println(k);    //输出的结果是?0

运算符的优先级

  • 不需要刻意去记这些优先级,表达式里面优先使用小括号来组织!
  • 逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非 > 逻辑与 > 逻辑或)例如:

a || b && c 的运算结果是:a || (b && c),而不是(a || b) && c 。

Last modification:December 23rd, 2019 at 10:37 pm
If you think my article is useful to you, please feel free to appreciate