Java入门基础(小白)(2)

运算符

Java语言支持如下运算符:

1.算术运算符:+,-,*,/,%,++,--

2.赋值运算符:=

3.关系运算符:>,< , >= , <= , == , !=instanceof

4.逻辑运算符:&& , || , !

5.位运算符:& , | , ^ ,~ , >> , << , >>>(了解)

6.条件运算符:?:

7.赋值运算符:+= , -= , *= , /=

算数运算符

操作符描述例子
+加法 - 相加运算符两侧的值A + B等于25
-减法 - 左操作数减去右操作数A – B等于-5
*乘法 - 相乘操作符两侧的值A * B等于150
/除法 - 左操作数除以右操作数B / A等于0.6
取模 - 左操作数除以右操作数的余数B%A等于0
++自增 - 操作数的值增加1B++ 或 ++B 等于11
--自减 - 操作数的值减少1B-- 或 --B 等于10

算术运算符:+,-,*,/运算符应用实例:

public class Demo05 {
    public static void main(String[] args) {
        int a = 10;
        int b = 15;


        System.out.println(a+b);//输出结果:25
        System.out.println(a-b);//输出结果:-5
        System.out.println(a*b);//输出结果:150
        System.out.println(a/b);//输出结果:0     结果出错,应该为小数,因为类型为int,无法运算出小数,所以在运算中就需要注意类型转换
        System.out.println((double) a/b);//输出结果:0.6666666666666666   上条的正确写法
        System.out.println(b%a);//输出结果:0

    }
}

算术运算符:++,--运算符应用实例:

public class Dmeo06 {
    public static void main(String[] args) {
        int a = 10;
        int b = a++;//执行完这行代码后,先给b赋值再,再自增
        //b = a + 1
        int c = ++a;//执行完这行代码后,先自增,再给c赋值

        System.out.println(a);//输出结果:12
        System.out.println(b);//输出结果:10  因为输出的还是原始a值,a++自增在本行下面计算。
        System.out.println(c);//输出结果:12
        System.out.println(c--);//输出结果:12   因为输出的还是原始a值,a++自增在本行下面计算。
        System.out.println(--c);//输出结果:10
    }
}

关系运算符

运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为真。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。   (A != B) 为假。
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B)非假。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A <B)为假。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A> = B)为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B)为真。

关系运算符:>,< , >= , <= , == , !=应用实例:

public class Demo07 {
    public static void main(String[] args) {
        int a = 120;
        int b = 120;
        //>,< , >= , <= , == , !=instanceof
        System.out.println(a==b);//输出结果:true
        System.out.println(a!=b);//输出结果:false
        System.out.println(a>b);//输出结果:false
        System.out.println(a<b);//输出结果:false
        System.out.println(a>=b);//输出结果:true
        System.out.println(a<=b);//输出结果:true
    }
}

逻辑运算符

操作符描述
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。

逻辑运算符:&& , || , !应用实例:

public class Demo07 {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;


        System.out.println("a && b:"+(a && b));//输出结果:a && b:false
        System.out.println("a || b:"+(a || b));//输出结果:a || b:true
        System.out.println("!(a && b):"+!(a && b));//输出结果:!(a && b):true
    }
}

对&&运算符中的逻辑梳理一下,定义是当且仅当两个操作数都为真,条件才为真,那么在运算中,判断的第一个值为假时会不会继续判断第二个值,我来做个实验验证一下:

public class Demo07 {
    public static void main(String[] args) {
        int a = 5;
        boolean b = a<1 && ++a<1;


        System.out.println(b);//输出结果:false
        System.out.println(a);//输出结果:5
    }
}

在以上代码中可见,a<1明显是错误的,且在输出a的时候没有自增,所以&&运算时在判断第一个为假时就不会执行第一个值后面的代码的,这点需要注意。

位运算符

操作符描述
按位与操作符,当且仅当两个操作数的某一位都非0时候结果的该位才为1。
|按位或操作符,只要两个操作数的某一位有一个非0时候结果的该位就为1。
^按位异或操作符,两个操作数的某一位不相同时候结果的该位就为1。
按位补运算符翻转操作数的每一位。
<<按位左移运算符。左操作数按位左移右操作数指定的位数。
>>按位右移运算符。左操作数按位右移右操作数指定的位数。
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

位运算符:& , | , ^ ,~ , >> , << , >>>

public class Demo07 {
    public static void main(String args[]) {
        int a = 60; /* 60 = 0011 1100 */
        int b = 13; /* 13 = 0000 1101 */
        int c = 0;
        c = a & b;       /* 12 = 0000 1100 */
        System.out.println("a & b = " + c );

        c = a | b;       /* 61 = 0011 1101 */
        System.out.println("a | b = " + c );

        c = a ^ b;       /* 49 = 0011 0001 */
        System.out.println("a ^ b = " + c );

        c = ~a;          /*-61 = 1100 0011 */
        System.out.println("~a = " + c );

        c = a << 2;     /* 0000 1100中的1100,往高位(左)移两位,240 = 1111 0000 */
        System.out.println("a << 2 = " + c );

        c = a >> 2;     /* 215 = 1111 */
        System.out.println("a >> 2  = " + c );

        c = a >>> 2;     /* 215 = 0000 1111 */
        System.out.println("a >>> 2 = " + c );
    }
}
<<>>>>>

左移时不管正负,低位补0

正数:r = 20 << 2

  20的二进制补码:0001 0100

  向左移动两位后:0101 0000

         结果:r = 80

负数:r = -20 << 2

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 1110 1011

  -20 的二进制补码 :1110 1100

  左移两位后的补码:1011 0000

        反码:1010 1111

        原码:1101 0000

        结果:r = -80

正数:r = 20 >> 2

  20的二进制补码:0001 0100

  向右移动两位后:0000 0101

       结果:r = 5

负数:r = -20 >> 2

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 :1110 1011

  -20 的二进制补码 :1110 1100 

  右移两位后的补码:1111 1011 

        反码:1111 1010

        原码:1000 0101

        结果:r = -5

<<表示左移移,不分正负数,低位补0; >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

定义的任何数值在存储底层都有对应二进制代码,位运算直接与二级进代码打交道,运行效率极高。

条件运算符

描述例子
?:判断哪个值应该赋值给变量a>120?"对":"错" 结果为"错"

条件运算符:?:应用实例:

public class Dmeo08 {
    public static void main(String[] args) {
        int a = 10;
        String b = a>12?"对":"错";// 公式: x? y:z   如果x为true,则结果为y,否则为z。

        System.out.println(b);//输出结果:错
    }
}

公式: x? y:z 如果x为true,则结果为y,否则为z。

拓展:字符串连接符

描述例子
+连接运算符两侧的值(""+a+b),得到1020,即10 和 20连接

字符串连接符

public class Dmeo08 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        //+ 为字串连接符  "" 代表字符串
        System.out.println(""+a+b);//输出结果:1020
        System.out.println(a+b+"");//输出结果:30    先执行a+b 所以结果为30
    }
}

拓展:整形运算

public class Demo

{   
 public static void main(String[] args) 
{
int a = 120;
long b = 1212121222222L;
 short c = 10;  
byte d = 5;       
 System.out.println(a+b+c+d);
//输出结果:1212121222357  结果为Long类型        
System.out.println(a+c);
//输出结果:130     结果为int类型 
 System.out.println(c+d);
//输出结果:15   结果为int类型
    }
}

以上代码中,int、long、short、byte四种类型相加结果默认为long类型。

int、short、byte三种类型相加结果默认为int类型。

short、byte两种类型相加结果默认为int类型。

可以得出结论:在整形运算中有long类型的运算中结果默认为long,没有long类型结果默认为int。

拓展:Java运算符优先级

类别操作符关联性
后缀() [] . (点操作符)左到右
一元+ + - !〜从右到左
乘性* /%左到右
加性+ -左到右
移位>> >>> <<左到右
关系>> = << =左到右
相等== !=左到右
按位与左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或| |左到右
条件?:从右到左
赋值= + = - = * = / =%= >> = << =&= ^ = | =从右到左
逗号左到右

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值