运算符(下)

目录

一、位运算符

        1、按位与&

        2、按位或|

        3、按位取反~

        4、按位异或

二、移位运算

        1、左移<<

        2、右移>>

        3、无符号右移>>>

三、条件运算符(三目运算符)


一、位运算符

        位运算符主要是利用到了比特位,也就是二进制位,只有0和1,而它们的位运算符主要有以下四类:

        1、按位与&

        按位与就是俩个二进制位都是1,则结果为1,否则结果为0,以图为例子:

                我们可以发现,俩个二进制数按位与,俩个为1结果为1,我们发现结果也是八十五的二进制;

        



public class WeiYunSuan {
    public static void main(String[] args) {
        byte a=85;
        byte b=125;
        System.out.println(a&b);
    }

}

输出结果为:

        2、按位或|

        同理,按位或|则是俩个都为1,结果则为0;因为我们在前一篇运算符||也讲过这个类似的,所以直接上代码:

        

public class WeiYunSuan {
    public static void main(String[] args) {
        byte a=85;
        //01010101
        byte b=125;
        //01111101
        System.out.println(a|b);
        //01111101
    }

}

         运行结果为:

        换算成二进制则是01111101,符合预期。

        3、按位取反~

                按位取反是直接讲原先的二进制0和1变成1和0,以代码为例。

public class WeiYunSuan {
    public static void main(String[] args) {
        byte a=85;
        //01010101
        System.out.println(~a);
        //10101010
    }
}

        运算结果如下 :

        由于byte是有符号的数,所以第一位是符号位,而第一位为1的话,那么这个数是一个负数,补码10101010的原码是11010110,也就是-86。

        4、按位异或

        按位异或的原理就是相同为0,相异为1,以刚才的代码为例子:

        

public class WeiYunSuan {
    public static void main(String[] args) {
        byte a=85;
        //01010101
        byte b=125;
        //01111101
        System.out.println(a^b);
        //00101000
    }
}

 运行结果如下:

         

二、移位运算

       移位运算主要是要了解它们的原理和一些用途。

         1、左移<<

           右移操作也就是最左侧位不要了,最右侧补0。

        

public class WeiYunSuan {
    public static void main(String[] args) {
        byte a=85;
        //01010101
        System.out.println(a<<1);
        //10101010
    }
}

运算结果是:

         

         一个有符号位的数如果通过左移将第一位变为1的话,那么此时这个数变成了无符号数。所以结果变成170;

        2、右移>>

        右移操作就是最右侧为不要了,最左侧补符号位,如果原先是正数,则补0,如果是负数,则补1;

        

public class WeiYunSuan {
    public static void main(String[] args) {
        byte a=85;
        //01010101
        System.out.println(a>>1);
        //00101010
        byte c=-1;
        //11111111
        System.out.println(c>>1);
        //11111111
    }
}

        运算结果为:

                符合我们预期的料想.

        3、无符号右移>>>

        而讲到最后的无符号右移也就是右移的时候,左边永远都是补0,无论符号位为1还是0,以代码为例:

        

public class WeiYunSuan {
    public static void main(String[] args) {
        int c=-1;
        //11111111 11111111 11111111 11111111
        System.out.println(c>>>1);
        //01111111 11111111 11111111 11111111
    }
}

        运算结果为:

        

三、条件运算符(三目运算符)

        条件运算符只有一个:

        表达式1?表达式2:表达式3

        当表达式1的值为true时,整个表达式的值为表达式2的值;

        当表达式1的值为false时,整个表达式的值为表达式3的值;

        这也是java唯一的一个三目运算符,时判断语句的简化写法,我举一个小的例子,比如求俩个数的最大值:

        

public class WeiYunSuan {
    public static void main(String[] args) {
        int a=0;
        int b=1;
        int c=a>b?a:b;
        System.out.println(c);
    }
}

        运算结果为:

        值得注意的是,三目运算符不能单独存在,如果上面代码单独一行a>b?a:b会直接报错,而三目运算符也是我们最常见的一种写法。

 

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值