Java 位运算符

本文深入解析位运算符和移位运算符的工作原理及其应用,包括按位与、按位或、按位异或、按位取反以及有符号和无符号右移等操作。同时,通过实例演示了如何利用位运算进行IP地址网段确定和数值交换,以及移位运算在数值操作中的高效性。

/*
         * 位运算符:直接作用于位的
         * 作用:因为我们直接操作的位,可以提高计算的效率
         * &(按位与):全1则1,有0则0:   作用:定向清0   
         * |(按位或):全0则0,有1则1
         * ^(按位异或):相同则0,不同则1
         * ~(按位取反):1则0,0则1
         */
        int a = 4,b=5;
        /*
         * 0100   4
         * 0101   5      &
         * 0100   4
         * 
         * 作用:定向清0     让IP于子网掩码做按位与操作,来确定IP的网段
         * 192.168.1.123   IP
         * 255.255.255.0   子网掩码
         * 192.168.1.1     网关
         * 
         * 
         * 0100  
         * 0101    |
         * 0101    5
         * 
         * 0000 0100    ~
         * 1111 1011    结果-5
         * 
         * 0100
         * 0101   ^
         * 0001   1
         * 作用:交换两个数的值
         */
        //第一种交换值:借助于三方变量
        int c = 0;
        c = a;
        a = b;
        b = c;
        System.out.println("a:"+a+"    b:"+b);
        
        //第二种交换值:借助于^
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        /*
         * 0101   a
         * 0100   b 
         * 0001   a    1
         * 
         * 0001   a
         * 0100   b
         * 0101   b    5  最终的b值
         * 
         * 0001   a
         * 0101   b
         * 0100   a    4  最终的a值
         */
        System.out.println("a:"+a+"    b:"+b);
        
        /*
         * 移位运算符  >>  有符号右移  << 有符号左移   >>>  无符号右移
         * >>1  右移一位:代表除以2 
         * <<1  左移一位:代表乘以2
         * 
         * 注意:先左移后右移或者先右移再左移之后,不一定得到原来的结果
         * 作用:直接操作的位,效率会高
         */
        /*
         * 原始        00000101  
         * 移动后       0 0000010    1  最后的1被删除了
         * 移动后       000001010     最后的0是补上的 
         */
        System.out.println(5>>1); 
        System.out.println(5<<1); 
        
        /*
         * 按照操作的元素个数分:
         * 一元运算符: ++  --   -(正)  +(负)   !   ~   
         * 二元运算符:
         * 三元运算符: ?:(三目运算符)
         */
        
        /*
         * ?:(三目运算符)
         * 
         * 表达式:由多个变量和运算符组合在一起的式子
         * 语句:表达式+;,窒息的一个;是空语句
         * 构成: 条件 ? 结果一:结果二
         * 原理:当作为条件的表达式的结果为true,整个三目元算符的结果就是结果一,否则就是结果二
         */
        //举例:求两个数的最大值
        int x = 4,y =6;
        int z = x>y?x:y;
        System.out.println(z);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值