【JAVASE_学习笔记】运算符

【JAVASE_学习笔记】运算符

算数运算符

+(正数,加号,连接符)
连接符:数据与字符使用+,此时+作为一个连接符,拼接字符串。任何数据与字符串使用连接符,结果类型为字符串类型。
注意:计算机每次只能运算一个+

System.out.println(1+2+3+"hello"+1+2+3);//输出6hello123

-(减号)
*(乘号)
/(除号)默认取整
%(取模,取余数)取模运算结果正负取决于被除数的正负

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

++(自增)- -(自减)
应用场景:
   1)单独使用:不管是++或者–在数据前还是数据后都是自增1或者自减1
   2)参与运算使用:
     a:++,- -在数据的前面,先自增1或者自减1,然后在运算(赋值)
     b:++,- -在数据的后面.先运算(先赋值),然后自增1或者自减1
练习:

/*
 * 1 :  int a = 10;
    int b = 10;
    int c = 10;

    a = b++;
    c = --a;
    b = ++a;
    a = c--;
    请分别计算出a,b,c的值
2:int x = 4;
int y = (x++)+(++x)+(x*10);
分别求出x和y的值

 * */
public class OperatorTest {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        int c = 10;

        a = b++;//a=10 ,b=11  c=10
        c = --a;//a=9  ,b=11,c=9
        b = ++a;//a=10,b=10, c=9
        a = c--;// a=9, b=10,c=8

        System.out.println("a:"+a);
        System.out.println("b:"+b);
        System.out.println("c:"+c);
        System.out.println("-----------------------");

        int x = 4;
        int y = (x++)+(++x)+(x*10);
        //x = 4,5,6
        //y = 4 + 6 + (6*10)
        System.out.println("x:"+x);
        System.out.println("y:"+y);
    }
}

赋值运算符

=(赋值运算符)
拓展的赋值运算符:
+=
表达的意思:将当前符号右边的数据和左边的数据相加赋值给左边的数据
-=
*=
/=
%=
对于扩展的赋值运算符:隐藏了默认的强制类型转换
例如:

/*
 *  面试题:
        short s=1;
            s = s+1; 

        short s=1;
            s+=1;
        上面两个代码有没有问题,如果有,哪里有问题。
 * */
public class OperatorTest {
    public static void main(String[] args) {
        //定义变量
//      short s = 1 ;
//      s = (short) (s + 1) ;

        short s = 1 ;
        s += 1 ;
        System.out.println(s);


    }
}

比较运算符

符号连接的表达式结果都是boolean类型
== 作用:
   1.用于基本数据类型数据比较时,判断两个数据是否相等;
   2.用于引用数据类型比较时,比较的是两个变量所指向的对象是否为同一个(比较的是内存地址)
!= (不等于)
<  (小于)
<  (大于)
<= (小于等于)
>= (大于等于)

逻辑运算符

主要作用是用于连接布尔表达式的
& (与)    两边都true,才true
|  (或)    一边为true,就为true
!  (非)    true边false,false边true
^ (异或)   两边不同为true,相同为false
&&(短路与)
||(短路或)
逻辑双与&&和逻辑单与& 的区别 (逻辑双或||和逻辑单或|):
  相同点:结果相同
  不同点:
      使用&&时,若左边为false,则不会运算右边布尔表达式,直接返回false;
       使用||时,若左边为true,则不会运算右边布尔表达式,直接返回true

位运算符

使用位运算符时,将1看为true,将0看为false
&(位与)

|(位或)

^(位异或)
位异或的一个特点:一个数据被另一个数据位异或两次,结果是该数据本身

~(取反)

public class OperatorDemo {
    public static void main(String[] args) {
        //位运算符
        System.out.println(3 & 4);
        System.out.println(3 | 4);
        System.out.println(3 ^ 4);//(位异或:重点)
        System.out.println(~3);

    }
}
/*
 * 计算出int类型3和4对应的二进制数据
 * 00000000 00000000    00000000    00000011
 * 00000000 00000000    00000000    00000100
 *位与:&
 *      特点:有0则0 
 *          00000000    00000000    00000000    00000011
 *    位与&:00000000  00000000    00000000    00000100
 * -------------------------------------------------------
 * 结果:  00000000    00000000    00000000    00000000
 *  0
 * 位或|:
 *      特点:有1,则1
 *       00000000   00000000    00000000    00000011
 * 位与|:00000000     00000000    00000000    00000100
 * -------------------------------------------------------
 *       00000000   00000000    00000000    00000111
 * 结果:7
 * 
 * 位异或:^
 *      特点:相同则为0,不同则为1
 *       00000000   00000000    00000000    00000011
 * 位与^:00000000     00000000    00000000    00000100
 * ------------------------------------------------------
 *       00000000   00000000    00000000    00000111
 * 结果:7
 * 
 * 反码:~:特点:按位取反(底层对补码进行按位取反)
 *      00000000    00000000    00000000    00000011 原码,反,补
 *  ~  --------------------------------------------------
 * 
 * 最高符号位                        数值位
 *      1                   1111111 11111111    11111111    11111100(补码)--->原码
 *                                                                -1
 *      1                   1111111 11111111    11111111    11111011        --->反码
 *      1                   0000000 00000000    00000000    00000100
 *      -                   4
 * 
 * 结果:-4
 * */

<<(左移)  最左边的最高符号为丢弃,右边补齐0
规律:一个操作数进行左移运算时,等于该操作数乘以2的n次方,n是移动的位数

>>(右移)  最高符号位为0,左边补0,最高符号位为1,左边补齐1
规律:一个操作数右移时,等于该操作数除以2的n次方,n是移动的位数

>>>(无符号右移) 不管最高符号位是0还是1,左边补齐0

三元运算符(三目运算符)

格式:
 (表达式)? true的结果 : false的结果;
执行流程:
 如果表达式成立,执行true的结果;
 如果表达式不成立,执行false的结果;
 

public class OperatorDemo {
    public static void main(String[] args) {

        //求两个数据是否相等
        int a = 100;
        int b = 200 ;

        //用三元运算符实现
//      boolean flag = (a==b) ? true : false;//==表示两个数据进行比较
//      System.out.println("flag:"+flag);
        //优化改进
        boolean flag = a==b ;
        System.out.println(flag);

        //求两个数据中的最大值
        //先定义变量max
        int max = (a>b) ? a : b ;
        System.out.println("两个数据中的最大值是:"+max);

        System.out.println("-----------------------");

        //求三个数据中的最大值
        int m = 10 ;
        int n = 50 ;
        int z = 20 ;
        //可以使用中间第三方变量进行实现,实际开发中就使用第三方进行实现
//      int temp = (m>n) ? m : n ;
//      //定义max2
//      int max2 = (temp > z) ? temp : z ;

        //一步走:
        int max2 = (m>n) ? ((m>z)? m: z) : ((n>z)? n: z) ;//不建议使用

        System.out.println("三个数据中的最大值是:"+max2);

    }
}

键盘录入

步骤:
  A:创建键盘录入对象:Scanner类: java.util包下的类
    固定格式:
    sc:对象名
    Scanner sc = new Scanner(System.in); //实质还是通过IO流实现的(java高级特性)
  B:导包:位置:class和package中间
    import java.util.Scanner;
  C:录入数据:使用对象名调用方法
    int a = sc.nextInt();
  D:输出

package _11.org.westos_键盘录入;

import java.util.Scanner;

//导包:import java.util.Scanner;快捷键:ctrl+shift+o
/*
 * 
键盘录入两个数据,并对这两个数据求和,输出其结果

 * */
public class ScannerTest {
    public static void main(String[] args) {
        //1)创建键盘录入对象
        Scanner sc = new Scanner(System.in)  ;

        //2)录入数据
        //提示
        System.out.println("请输入第一个数据:");
        int firstNumber = sc.nextInt() ;

        System.out.println("请输入第二个数据:");
        int secondNumber = sc.nextInt() ;

        //定义个最终变量
        int result = firstNumber + secondNumber ;
        System.out.println("result:"+result);


    }
}

你可能感兴趣的:(学习笔记)