天天看点

Java运算符、表达式、语句块一、运算符二、表达式 语句块

一、运算符

在java中用于程序计算的操作i发统称为运算符,运算符分为如下几类:
           

1、算术运算符

算术运算符 说明
+ 加号两边是数值,可以运算,如果一边存在字符串,则当作连接符 a+b
- 两个数相减,减号也可以当作负数 a-b -a
* 两个数相乘,其中*不能省略 a*b
/ 两个数相除,必须保证数据类型一致,其中除数不能为0,否则出现算术错误 a/b
% 对一个数取余 a%b
++ 对一个数自增 i++
-- 对一个数自减 i--

8

//  +    -  *   /   %   所有运算符在计算时要保证数据类型一致
        int num1=100;
        int num2=200;
        int sum=num1+num2;
        int nul=num1-num2;
        int num3=-num2;  //-200
        System.out.println("两个数相加:"+sum);  //+  表示连接符
        System.out.println("两个数相减:"+nul);
        System.out.println("num2:"+num2+",num3:"+num3);
      //  System.out.println("num+num2:"+(num1+num2));

        int sum2=num1*num2;
        int sum3=num1/num2;
        System.out.println(sum3);  //  0
        System.out.println(num1/sum3);  //算术异常ArithmeticException

        //取模
        System.out.println(10%2);  //0
        System.out.println(1%5);  //1   小的数取模大的数是其本身

    }
           
//自加     自减 ++     --   只能对整数进行
        int  i=1;
        i++;   //  i=i+1;
        System.out.println("i:"+i);
        int j=1;
        ++j;   //j=j+1;
        System.out.println("j:"+j);

        int a=1;
        int sum=a++;  //先将a+de赋值给sum,a在自加1
        int sum2=++a;   //先将a自加1,再将自加后的值赋值给sum2
        System.out.println("sum:"+sum);
        System.out.println("sum2:"+sum2);
        System.out.println("a:"+a);  // 3
        int sum3=a++ + a++;
        System.out.println("sum3:"+sum3);
        System.out.println("a:"+a);

        int b=1;
        int s1=b--;   //  b=b-1  s1的值为  b先赋值  再自减
        int s2=--b;    //b=b-1   s2的值为  b先自减   再赋值
        System.out.println("b:"+b);
        System.out.println("s1:"+s1);
        System.out.println("s2:"+s2);

        //  ++  --  综合
        int x=1;
        int y=2;
        int s3 = x++ + --x *(y-- + ++x);//1+1*4
        System.out.println("s3:"+s3);
        System.out.println("x:"+x);
        System.out.println("y:"+y);

           

2、比较运算符

​ 用于比较两个表达式之间的结果 结果返回true 或 false

比较运算符 说明
> 比较左边是否大于右边的数,如果大于返回true,否则返回false
< 比较左边是否小于右边的数,如果小于返回true,否则返回false
>= 比较左边是否大于等于右边的数,如果大于等于返回true,否则返回false
<= 比较左边是否小于等于右边的数,如果小于等于返回true,否则返回false
== 比较左边是否相等右边的数,如果相等返回true,否则返回false,对于基本数据类型比较数值是否相等,对于引用数据类型比较 它们的地址是否相同(比较地址就是比较他们存储的内存地方)
!= 比较左边是否不等于右边的数,如果不等于返回true,否则返回false
//自加     自减 ++     --   只能对整数进行
        int  i=1;
        i++;   //  i=i+1;
        System.out.println("i:"+i);
        int j=1;
        ++j;   //j=j+1;
        System.out.println("j:"+j);

        int a=1;
        int sum=a++;  //先将a+de赋值给sum,a在自加1
        int sum2=++a;   //先将a自加1,再将自加后的值赋值给sum2
        System.out.println("sum:"+sum);
        System.out.println("sum2:"+sum2);
        System.out.println("a:"+a);  // 3
        int sum3=a++ + a++;
        System.out.println("sum3:"+sum3);
        System.out.println("a:"+a);

        int b=1;
        int s1=b--;   //  b=b-1  s1的值为  b先赋值  再自减
        int s2=--b;    //b=b-1   s2的值为  b先自减   再赋值
        System.out.println("b:"+b);
        System.out.println("s1:"+s1);
        System.out.println("s2:"+s2);

        //  ++  --  综合
        int x=1;
        int y=2;
        int s3 = x++ + --x *(y-- + ++x);//1+1*4
        System.out.println("s3:"+s3);
        System.out.println("x:"+x);
        System.out.println("y:"+y);

           

3、赋值运算符

​ 将表达式的结果 赋值给一个变量,只能赋值给变量 不能赋值给常量

例如 a=3

赋值运算符 说明 案例
= 将=右边的结果 赋值给左边的变量 int a=2 把2赋值给a
+= 计算后的赋值,将+=右边的结果赋值给左边的变量 a+=2 等价于a=a+2
-= 计算后的赋值,将-=右边的结果赋值给左边的变量 a-=b 等价于a=a-b
*= 计算后的赋值,将*=右边的结果赋值给左边的变量 a**=b 等价于a=a * b
/= 计算后的赋值,将/=右边的结果赋值给左边的变量 a/=b 等价于a=a/b b不等于0
&= 计算后的赋值,将%=右边的结果赋值给左边的变量 a%=b 等价于a=a%b b不等于0
//赋值运算符  =  +=  -=  *=  /=  %=
        int a=2;
        a+=2;
        System.out.println(a);//a
        a-=3;
        System.out.println(a);//1
        a*=2;
        System.out.println(a);//2
        a/=4;
        System.out.println(a);//0

        a+=a-=3; //    a+=(a-=3)
        System.out.println("a="+a);

        int x=2;
        x+=x-=x*=x++;
        //x = x +(x = x -(x = x *(x++)))
        //x=2+(x=2-(x=2*2))
        //x=2+(2-4)=0
        System.out.println("x="+x);
        
        //赋值运算符优先级最di    从右往左计算
        int z=1;
        int y=1;
        z+=(z++) + (z--) +(y-=z++);
        System.out.println(z);  //4
        System.out.println(y);  //0
        
    }
           

4、逻辑运算符

​ 在Java中用于两个或两个以上的表达式,取逻辑判断的结果 通常需要使用逻辑运算符

逻辑运算符 说明
& 逻辑与,左右两边可以连接表达式,两个表达式都成立时,整个结果为true true&true true&false,flase&true flase&flase
| 逻辑或,左右两边可以连接表达式,两个表达式任意一个成立时,整个结果为true true|true true|false,flase|true flase|flase
逻辑非,对表达式取反 !flase !true
&& 短路与,与&类似,短路 特点 符号左边为false,右边不再计算
|| 短路或,与|类似,短路 特点 符号左边为true,右边不再计算
//逻辑运算符
        System.out.println(true&true);  //true
        System.out.println(true&false);
        System.out.println(false&true);
        System.out.println(false&false);
        //true%true
        System.out.println(1>0 & 3>1);
        System.out.println(1>0 && 3>1);
        //  
        System.out.println(true|true);
        System.out.println(true|false);
        System.out.println(false|true);
        System.out.println(false|false);  //false
        //   \   短路或
        System.out.println(true||false);

        //取反
        System.out.println(!true);
        System.out.println(!false);

           

总结:&与&&的区别 |与||的区别?

回答: 1、&对于符号两边的表达式都会执行 &&符号左边为false,则右边不执行

​ |对于符号两边的表达式都会执行 ||符号左边为true,则右边不执行

​ 2、&、|两边可以直接写数字,按位计算,短路符号 不能直接计算

// &&  与   &    的区别
        int a=1;
        int b=2;
        System.out.println(a>b && b++>0);
        System.out.println("b:"+b);
//        System.out.println(a>b & b++>0);
//        System.out.println("b:"+b);

        //  \  与   的区别
        System.out.println(a>=1 ||  a++<0);// a++不执行
        System.out.println("a:"+a);
        System.out.println(a>=1 | a++<0);
        System.out.println("再次输出a:" +a);

        //另外一个区别   &     两边可以是数值,但是短路符号不可以

           
十进制 转换
1 1*2的0次方
2 1*2的1次方
4 1*2的2次方
...... 对于2的倍数,1*2的n次方 转成二进制位1后面n个0
64 1*2的6次方

队医任意十进制转二进制,先查找比他晓的且离他最近的2的倍数,然后差值再进行二进制转换(拆分发)

​ 例如 96=64=32=1100000

二进制转十进制

公式 从个位开始,每个位上的数,乘以2的n次方 之和

System.out.println(4&5);  //将结果转成二进制
        System.out.println(4|5);
        //  4的二进制  100
        //  5的二进制  101
        //  &    4     100
        //  |    5     101

        //十进制转二进制
        //1——》2的0次方   1
        //2——》2的1次方   10
        //4——》2的2次方   100
        //以此类推
        //64——》2的6次方   1000000

           

5、位运算符

移位运算符 说明 案例
< < 左移:将一个数转成二进制之后,整体往左移动n位,扩大倍数,一个属向左移动n位,结果为这个数乘以2的n次方 3<<2等价于9*2的2次方
> > 右移:将一个数转成二进制之后,整体往右移动n位,缩小倍数,一个属向右移动n位,结果为这个数除乘以2的n次方(除不尽单独考虑) 8>>2等价于8/2的2次方
> > > 无符号的右移,不考虑符号位,将这个数整体往右移动
^ n 异或
- n 数值取反
//正整数的移位  <<    >>      >>>
        System.out.println(3<<2);//3*2^2=12
        System.out.println(7<<3);//7*2^3=56
        //对于正数的无符号右移和 右移结果一样
        System.out.println(16>>2);//4
        System.out.println(18>>2);//4

        System.out.println(5^9); //12

        System.out.println(3>>2);//0
        System.out.println(3>>>2);//0

           
//负数的移位
        //负数的移位还是负数
        System.out.println(-4<<2);  //-4*2的2次方=-16
        //-16无符号右移2位
        System.out.println(-16>>>2);
        // 由于不考虑符号,移动后高位全补0变成正数
        //  正数的原码和补码一致  这个数即为所得

           
// 取反
        System.out.println( ~5);
        //0000。。00000101
        //1111.。11111010  取反后成了负数  继续还原
        //1000.。00000101    +1  还原后加1
        //1000.。00000110  =  -6

           

6、三目运算符

​ 判断式?结果1:结果2;

public static void main(String[] args) {
        System.out.println(Math.random());
        //生成100以内的随机数
        int n=(int)(Math.random()*100);
        System.out.println("n:"+n);
        System.out.println(n%2==0?"这个数是偶数":"这个数是奇数");
    }
           

二、表达式 语句块

表达式

​ 通过运算符和操作数组成的元素,表达式不能单独在程序中,需要接受或者输出

注意:这里的()表示方法的括号​、点号表述小数点、【】表示数组的下限

​ 2-5:用于得到结果的值

​ 6-12:用于运输算得到true、false

​ 13.14:是赋值 赋值的优先级最低

语句块

public static void main(String[] args) {
        //定义一个方法中的代码块
        {
            //局部变量只能使用再它所在的区域
            int a=1;
            a++;
            System.out.println("这是一个方法里面的代码块"+a);
        }
        //a++;
        if (true){
            System.out.println("这是一个if的语句块");
        }

    }