Day09——运算符

基本运算符

运算符

Java 语言支持如下运算符: (重点掌握前4个)

算术运算符:+、-、*、/、%、++; --

赋值运算符: =

关系运算符:>、<、>=、<=、==、!=、instanceof(稍后再讲)

逻辑运算符:&&、||、!

位运算符:&、|、^、~、>>、<<、>>>;(了解)

条件运算符: ? :

扩展赋值运算符:+=、-=、*=、/=。

详细解释:

/ 除法

% 取余 左操作数除以右操作数的余数

= 赋值运算符,将右操作数的值赋给左侧操作数,C = A + B将把A + B得到的值赋给C

== 判断如果两个操作数的值是否相等,如果相等则条件为真。对于String类型,==运算符用于比较两个对象的引用是否相同。

!= 判断如果两个操作数的值是否不相等,如果值不相等则条件为真。

按位与(&) :对两个整数的二进制表示的每一位进行与运算。只有当两个相应位都为 1 时,结果位才为 1,否则为 0。 例如:5(二进制为 0101)& 3(二进制为 0011),结果为 0001,即 1。

按位或(|):对两个整数的二进制表示的每一位进行或运算。只要两个相应位中有一个为 1,结果位就为 1。 例如:5(二进制为 0101)| 3(二进制为 0011),结果为 0111,即 7。

按位异或(^):对两个整数的二进制表示的每一位进行异或运算。当两个相应位不同时,结果位为 1相同时为 0。 例如:5(二进制为 0101)^ 3(二进制为 0011),结果为 0110,即 6。

按位取反(~):对一个整数的二进制表示的每一位进行取反操作。0 变为 1,1 变为 0。 例如:~5(二进制为 0101),结果为 1010,由于计算机中以补码形式存储,所以结果为 -6。

左移(<<):将一个整数的二进制表示向左移动指定的位数。左移一位相当于乘以 2。 例如:5(二进制为 0101)<< 1,结果为 1010,即 10。

右移(>>) :将一个整数的二进制表示向右移动指定的位数。正数右移一位相当于除以 2,负数右移时,高位补符号位。 例如:5(二进制为 0101)>> 1,结果为 0010,即 2。

无符号右移(>>>): 无论操作数是正数还是负数,无符号右移都用 0 填充高位。 例如:-5(二进制为 11111111111111111111111111111011)>>> 1,结果为 01111111111111111111111111111101,即 2147483645。

逻辑运算符:判断与 或 非的关系 and or

//二元运算符   两个数的运算
        //Ctrl+D  复制当前行到下一行
        //Ctrl+Y  删除当前行
        //Shift + Enter:在当前行的下方开始新行
        
        
        int a=10;
        int b=20;
        int c=25;
        int d=25;
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println((double)a/b);  //在计算时,要小心结果小数部分四舍五入的问题。可以把一个数转换类型

关系运算符

 //关系运算符返回的结果:正确、错误    布尔值
        int i1=10;
        int i2=12;
        System.out.println(i1==i2);//false
        System.out.println(i1!=i2);//true
        System.out.println(i1<i2);//true
        System.out.println(i1>i2);//false
        System.out.println(i1<=i2);//true
        System.out.println(i1>=i2);//false
        System.out.println(i2%i1);  //2

自增自减运算符

//++  --   自增 自减   一元运算符  难点!!!!!!!!!!!!!!
        int a=3;
        int b=a++;            //a++  a先赋值给b,然后a自增  a=a+1
                             //a=4;b=3

        int c=++a;            //++a   a先自增,再给b赋值
        System.out.println(c);//c=5
        System.out.println(a);//a=5
        /*
        System.out.println(a);//5
        System.out.println(a);
        System.out.println(b);//3
        System.out.println(b);
        System.out.println(c);//5
        System.out.println(c);
        */

        //一定要上手算一遍,才知道a++和++a的区别!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

要点:

a++ a先赋值给b,然后a自增

++a a先自增,再给b赋值

幂的计算

//拓展——幂的计算
        System.out.println(Math.pow(2,3));//8.0
        //Math.pow()方法返回数据是double类型

总结:

Math.pow()方法返回数据默认是double类型

逻辑运算符

//逻辑运算符
        //与(and)   或(or)    非(取反)
        boolean a=true;
        boolean b=false;
        System.out.println("a&&b:"+(a&&b));  //false  逻辑与运算:两个结果都为真,结果才为真
        System.out.println("a||b:"+(a||b));  //true   逻辑或运算:有一个结果为真,结果为真
        System.out.println("!a&&b:"+!(a&&b));//true   逻辑非运算:如果是真,则为假
        System.out.println("==============================");
        
        
        //短路运算:
        // 当a&&b,a为false时,程序会不会检查b的情况?
        int c=5;
        boolean d=(c>6)&&(c++<1);
        System.out.println(d);//false
        System.out.println(c);//5  (c++<1)没有被程序所运算
        //总结:当a&&b,a为false时,程序不会检查b的情况而直接输出false

总结:

&& 与运算:两个结果都为真,结果才为真

|| 或运算:有一个结果为真,结果为真

! 非运算:如果是真,则为假

位运算符

//位运算符          位运算效率高
        /*
        A=0011 1100
        B=0000 1101
-------------------------------------------------------------
      A&B 0000 1100       & 与  两个相应位都为 1 时,结果位才为 1
      A|B 0011 1101       | 或  两位有1个1,就为1
      A^B 0011 0001       ^ 异或  两位不同为1,相同为0
      ~b  1111 0010       ~ 相反  1变0;0变1
      <<   左移   相当于乘二
      >>   右移   /2
-------------------------------------------------------------

         */
        //利用位运算符快速计算2*8     2*2*2*2
        System.out.println(2<<3);
        /*
        0000 0000          0
        0000 0001          1
        0000 0010          2
        0000 0011          3
        0000 0100          4
        0000 1000          8
        0001 0000          16         每乘一个2,二进制的1就左移1位
         */

注意:

& 与 对应的两个二进位均为1时,结果位才为1 ,否则为0。

| 或 两位有1个1,就为1

^ 异或 两位不同为1,相同为0
相反 1变0;0变1

<< 左移 相当于乘二

扩展赋值运算符

//扩展赋值运算符   可偷懒

        /*int a=10;
        int b=20;
        //a+=b;   //a=a+b
        a-=b;   //a=a-b
        System.out.println(a); //-10
        System.out.println(b);  //20


        System.out.println(a+b); //10
        */

总结:

a+=b 相当于 a=a+b

a-=b 相当于 a=a-b

字符串连接符

//字符串连接符         +
        int i1=10;
        int i2=20;
        System.out.println(i1+i2);//30
        System.out.println(""+i1+i2);//1020    字符串在前面,后面的会进行拼接;
        System.out.println(i1+i2+"");//30       字符串在后面,前面的会进行运算
        //注意:""+i1+i2  和    i1+i2+""   含义不一样

注意:

""+i1+i2 和 i1+i2+"" 含义不一样

三元运算符

//三元运算符   ? :
        //x ? y : z
        //如果x==true,结果为y;否则结果为z
        int score=55;
        String result=score<60 ? "成绩不及格":"成绩及格";
        System.out.println(result);//成绩不及格

总结:

x ? y : z
如果x==true,结果为y;否则结果为z

易错题:

  1. 以下代码的输出结果是? 正确答案:B
String str1 = "Hello";
String str2 = new String("Hello");
System.out.println(str1 == str2);

A. true
B. false
C. 编译错误
D. 运行时错误

解析:在 Java 中,==运算符用于比较两个对象的引用是否相同。对于String类型,str1 = "Hello";这里str1指向的是字符串常量池中的"Hello"对象,而str2 = new String("Hello");这种方式会在堆内存中重新创建一个新的"Hello"对象,虽然内容相同,但它们的引用是不同的。所以str1 == str2的结果是false,因为它们指向的不是同一个对象实例。

posted @ 2024-10-06 10:32  1hahahahahahahaha  阅读(49)  评论(0)    收藏  举报