zoukankan      html  css  js  c++  java
  • day02(运算符)

    1.算术运算符

    (1)

    System.out.println(1+2+3+"hello"+1+2+3);  //输出6hello123,非6hello6或123hello123

    原因:*每次运算时都是一次从左到右依次取两个数据运算;

       *任何类型的数据与字符串连接,结果是字符串类型的数据,即当运算到6hello+1+2+3时,"6hello"为字符串类型。

    (2)

    System.out.println(10%3);    //1
    System.out.println(10%-3);   //1
    System.out.println(-10%3);   //-1
    System.out.println(-10%-3);  //-1

    原因:java取模运算中,结果的正负号取决于被除数。

    (3)自增自减

    int a,b;

    前自增:a = 2;  b=++a;  //a=3,b=3  (先自增,再使用)

    后自增:a = 2;  b=a++;  //a=3,b=2  (先使用,再自增)不完全正确,便于理解

    自减同理。

    int i = 0;
    i = i++;
    System.out.println('i='+i);    //输出i=0

    后自增咋JVM中的运行原理:因为后自增要使用到没有+1之前的值,那么jvm会先声明一个变量用于保存没有+1之前的值

    上面代码可分为三步:

    1*  int temp = i;  //声明一个临时变量用于记录i没有加1之前的值

    2*  自增 i = i + 1;  i = 1;

    3*  return temp;  //将temp作为表达式(i++)的结果  

    2.赋值运算符

    byte b1 = 1;
    byte b2 = 2;
    //b2 = b1 + b2;    //报错,需要强制类型转换
    b2 += b1;    //对,因为使用'+='符号在编译时,java编译器会自动进行强制类型转换

    3.比较运算符

    (1)==在比较两个引用数据类型变量时,比较的是两个变量的内存地址是否相同。

    (2)使用比较运算符的时候,要求两种数据类型必须一致。 byte、short、char 会自动提升至int;

    当两个不同数据类型的数据不兼容时,会报错(例如boolean与int)。

    (3)Instanceof  检查是否是类的对象 

    例:"hello"instanceof String  //true

    4.逻辑运算符

    (1)^  异或

    两边相同结果是false;   两边不同结果是true。

    (2)&&  (短路与)

    只有两边全为真的时候,结果才为真(同&),

    当左边为假的时候就没有必要在进行判断,所以&& 效率稍微高了一点。

    (3)|| (短路或)

    只要一边为真的时候,结果就为真(同|),

    当左边为真的时候就没有必要在进行判断,所以 || 比 | 效率稍微高了一点。

    5.位运算符(&、|、^、~)直接操作二进制位

    (1)

    System.out.println(6&3);    //2

      0110  //6

    &  0011  //3  

    .......................................

      0010  //2

    (2)~:取反,将1变成0,或将0变成1

    (3)^:异或

    规律:如果操作数A连续异或同一个数据两次,结果还是操作数A

    应用:对数据加密

    (4)可能会出现的笔试题目

    *交换两个变量的值

    方法一:(异或法)

    int a = 3;
    int b = 5;
    a = a^b;    //a = 3^5;
    b = a^b;    //b = (3^5)^5 = 3;
    a = a^b;    //a = (3^5)^3 = 5;
    System.out.println("a="+a+"b="+b); 

    方法二:(相加法)

    int a = 3;
    int b = 5;
    a = a+b;   // a = 3+5= 8;
    b = a-b;    // b = 8-5 = 3;
    a = a-b;    // a = 8-3 = 5;
    System.out.println("a="+a+"b="+b);

    *取出一个二进制数据的指定位数(取低四位)

    用&来解决,第四位为1,其余为0

    6.移位运算符

    (1)

    << 左移:左移n位,结果就是操作数乘以2的n次方;

    >> 右移:右移n位,结果就是操作数除以2的n次方,

    注意:左边补充位是1还是0,正数补充0,负数补充1;

    >>> 无符号右移:左边补充位都是0;

    (2)笔试题目:

    用最高效率算出2乘以8的结果:2<<3 = 2*(2^3) = 16;

    7.三元运算符

    (1)格式:布尔表达式?值1:值2;

    如果布尔表达式为true,运算后的结果是值1

    如果布尔表达式为false,运算后的结果是值2

    (2)注意:

    使用三元运算符的时候,一定要使用该表达式返回的结果,或者定义一个变量接受该表达式返回的结果;

    int age = 14;
    String result = age>=18?"成年人":"未成年人";
    System.out.println(result);
  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/stellar/p/5135992.html
Copyright © 2011-2022 走看看