数学运算符、逻辑运算符、位运算符小结

运算符

数学运算符

+ - * /  % ++ --

其中-与*与数学中的效果是一样的

+符号

如果两边都是数字,则做数学运算;如果+的左边或者右边是字符串,则起到拼接字符串

int a = 5;
        int b = 6;
        //如果+两边都是数字,则做数学运算(与数学中的效果是一样的)
        System.out.println(a + b);//11

        int c = 7;
        String s = "hello";
        System.out.println(c + s);//"7hello"

        System.out.println(c + b + s + b + c);//"13hello67"

变量参与+的数学运算问题(自动的类型提升)

在运算中如果直接使用变量,则java会自动的做类型提升, byte short char 都会被自动的提升为int

byte b1 = 3;
        byte b2 = 4;
        /*
        在运算中如果直接使用变量,则java会自动的做类型提升
        byte short char 都会被自动的提升为int
         */
       // byte b3 = b1 + b2;//会出错
        byte b3 = (byte)(b1 + b2);
        byte b34 = 3 + 4;//如果是字面量做数学运算,就不需要强转
自增与自减

++自增

  • –自减
    自增/自减表达式本身的值

++a:先自增,再赋值
a++:先赋值,再自增

自增:将a变量的值+1
赋值:将a变量的值赋给表达式

a–:先赋值,再自减
–a:先自减,再赋值

 int a = 5;//6
        System.out.println(a++);//5
        System.out.println(a);//6


        int b = 5;//6
        System.out.println(++b);//6
        System.out.println(b);//6

        int c = 5;//6 7
        System.out.println(c++ + ++c);//12
        //                  5     7

        int e = 5;//6  5
        int f = 6;//5  6
        System.out.println(e++ - --f + f++ - --e);//0
        //                 5     5      5     5
        System.out.println(e + ":" + f);//5:6


        int g = 5;//6 5
        //赋值的过程:将右边的值赋值给左边的变量
        g = g++;
        //   5
        System.out.println(g);//5
/符号

结果值的类型与 除数与被除数中长度最大的类型 一致
如果结果值应该是整型,但是真实的结果是浮点型。 java就会将真实的浮点型结果转换成整型

 		System.out.println(4/3);//1
        System.out.println(5/2.0);//2.5
        System.out.println(5.0/2);//2.5
%取余符号
//求10除以3的余数
        System.out.println(10%3);//1
        //求3除以10的余数
        System.out.println(3%10);//3
逻辑运算符(& && | || ! ^)
&与&&

逻辑与符号的使用:&
相当于生活中说的并且。

boolean表达式1&boolean表达式2
boolean值1&boolean值2

boolean表达式:得到的结果一定是boolean值
特点:左右两边都是true的时候,整个表达式的结果就是true. 否则都是false

&& :基本使用与&是一致的
特点:左右两边都是true的时候,整个表达式的结果就是true. 否则都是false
与&的区别:
&&有短路的效果:如果判断出左边的表达式值为false,则不用判断右边的值,而直接给出整体的结果为false

int a = 5;
        int b = 6;
        //左边的表达式值为true 右边的表达式值为true,所以整体的结果为true
        System.out.println((a++ == 5) & (++b == 7));//true
        //左边的表达式值为true 右边的表达式值为flase,所以整体的结果为false
        System.out.println((a == 6) & (b == 6));//false

        // 测试&& 的基本使用与 & 结果是一致的
        int c = 5;
        int d = 6;
        System.out.println((c++ == 5) && (++d == 7));//true


        //测试&没有短路效果
        int a2 = 5;
        int b2 = 6;//7
        System.out.println((a2 == 6)&(b2++ == 6));//false
        /*
        打印表b2的值为7,说明上面的表达式中了判断右边的表达式,说明没有短路效果
         */
        System.out.println(b2);//7

        int c2 = 5;
        int d2 = 6;
        System.out.println((c2 == 6)&&(d2++ == 6));//false
        /*
        打印d2的值为6,说明上面的表达式中没有判断右边的表达式,说明短路效果确实有效
         */
        System.out.println(d2);//6
|与||

逻辑|与||符号的使用
就是与生活中中的或者是一个意思
特点:符号连接的表达式中只要有一个结果为true,则整体的结果为true

| 与 || 的区别:
||有短路效果:
如果左边的结果为true,则不用再判断右边的表达式了

		int a = 5;
        int b = 6;
        int c = 6;
        System.out.println((a == 5) | (b == 7));//true


        System.out.println((a == 5)|(c++ == 6));//true
        //| 没有短路效果,所以要判断右边的表达式,c的值有自增一次
        System.out.println(c);//7
        System.out.println((a == 5)||(b++ == 6));//true
        //|| 有短路效果,所以不会判断右边的表达式,b的值不会发生变化
        System.out.println(b);//6
!^

!:取反
用法:!boolean表达式
作用:结果为boolean表达式相反的值

^:异或(了解)
用法:boolean表达式1^boolean表达式2
特点:左边的表达式的值 与 右边的表达式的值,如果相同,则整个表达式的值就是false,否则就是true

		int a = 5;
        int b = 6;
        // a==b 不成立,结果值为false,加上!之后,结果就取反,就变成了true
        System.out.println(!(a == b));//true
        System.out.println(!(a < b));//false

        System.out.println((a < b)^(a > b));//true
        System.out.println((a < b)^(b > a));//false
位运算符(& | ^ >> << >>>)

& | ^ 写法与逻辑运算符是一致的
如果运算符两边是boolean表达式的话,则符号的作用是逻辑运算符
如果运算符两边是数字的话,则符号的作用是位运算符

& |&

& | ^ 位运算符的使用
可以将1看做true,可以将0看做false

 &:两个都是1,则结果为1,否则为0
 |:只要有一个为1,则结果为1,否则为0
 ^:两个值不同,则结果为1,否则为0
//这里用int类型举例 其他类型只是位数不同,运算方式都一样
& 做位运算符的时候,运算方式:
        将两个数字都转换为二进制
        3:00000000 00000000 00000000 00000011
        2:00000000 00000000 00000000 00000010
        ---------------------------------------
          00000000 00000000 00000000 00000010                                
         */
        System.out.println(3 & 2);//2

        /*
        3:00000000 00000000 00000000 00000011
        2:00000000 00000000 00000000 00000010
        ---------------------------------------
          00000000 00000000 00000000 00000011
         */
        System.out.println(3 | 2);//3
        /*
         3:00000000 00000000 00000000 00000011
         2:00000000 00000000 00000000 00000010
         --------------------------------------
           00000000 00000000 00000000 00000001
         */
        System.out.println(3 ^ 2);//1
>> << >>>
<<:左位移

将数字的二进制形式向左移动指定的位数,右方补0

		/*
		2:00000000 00000000 00000000 00000010    位移之前
          00000000 00000000 00000000 00010000   位移之后
         */
         //符号前表示要移动的数,符号后面表示要移动几位
        System.out.println(2 << 3);//16
>>:右位移

将数字的二进制形式向右移动指定的位数,
左边的首位如果是1,则在左方补1
左边的首位如果是0,则在左方补0

/*
		24:00000000 00000000 00000000 00011000  位移之前
           00000000 00000000 00000000 00000011  位移之后
*/		
		System.out.println(24 >> 3);//3
        System.out.println(-24 >> 3);//-3
>>>:无符号右位移

将数字的二进制形式向右移动指定的位数,无论左边的首位是1还是0,都在左方补0

/*
		-24原码:10000000 00000000 00000000 00011000
        -24的反码:11111111 11111111 11111111 11100111
        -24的补码:11111111 11111111 11111111 11101000
        位移之后: 00011111 11111111 11111111 11111101
*/
		System.out.println(-24 >>> 3);//536870909

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值