day10

运算符(中)逻辑运算符和位运算符

逻辑运算符

逻辑运算符规律(通过boolean进行运算的)

运算符用法含义
与(&&)op1&&op2逻辑与
或(||)op1||op2逻辑或
非( !)!op逻辑非

逻辑运算符号运算规则

op1op2op1&&op2op1||op2!op1
truetruetruetruefalse
truefalsefalsetruefalse
falseturefalsetruetrue
falsefalsefalsefalsetrue

逻辑运算符测试代码

package package_01;

public class Demo_02 {
    public static void main(String[] args) {
        //运算符与(&&)或(||)非!代码测试
        boolean a=true;
        boolean b=false;

        System.out.println("a&&b:"+(a&&b));//如果a是true 并且b是false那么他会先算a然后算b发现b是假的那么&&返回结果就是false了
        System.out.println("a||b:"+(a||b));//如果a是true,湖或者b是false,返回就是true
        System.out.println("a!b:"+!(a||b));//如果是非(a或者b)返回结果是false
        System.out.println("a!b:"+!(a&&b));//如果是非a与b,返回结果就是true
        
        System.out.println("=============================================");

        //当在执行的时候如果第一个返回的就是错的,代码将不会执行,如果是对的会执行之后在判断
        int c=5;
        boolean d=(c<4)&&(c++>4);//c<4是错误的,那么代码执行的时候发现错误之后后面c++>4这个就不会执行了所以后面的c打印出来是没有+1的
        System.out.println(d);
        System.out.println(c);
        System.out.println("==============================================");
        boolean e=(c++>5)&&(c++<4);//当第一个满足条件之后,他就不会短路,他会执行完第一个,然后在执行c++<4当发现错误之后就会返回false但是打印c会+1
        System.out.println(e);
        System.out.println(c);
        
    }
}

位运算符

概括

​ 所谓位运算符,把人搞的一头雾水,“位”到底是个什么玩意儿呢?“位”既然修饰“运算符”,那么就说明“位运算符”是按位运算的,按“位”运算,前提是有“位”,这个为“位”从哪来呢?这就是位运算符的高级之处了,位运算是将数据先转化为二进制数补码形式,再逐位(bit)按规则计算。

位运算符的符号及规则

“按位与”运算符“&”,规则:全1则1,否则为0

位1: 000101 0010110110001

位2: 100100 0110010000001

结果:000100 0010010000001

“按位或”运算符“|”,规则:全0则0,否则为1。

位1: 000101 0010110110001

位2: 100100 0110010000001

结果:100101 0110110110001

“按位非”运算符“~”,规则:遇1则0,遇0则1。

位非:000101 0010110110001

结果:111010 1101001001110

“按位异或”运算符“^”,规则:相同为0,不同为1。

位1: 000101 0010110110001

位2: 100100 0110010000001

结果:100001 0100100110000

ps:按位异或很奇妙,使用两次则还原:

  3 ^ 5 = 6;

  6 ^ 5 = 3;

位左移 “<<” 和 位右移">>“还有”>>>"

“<<” 位左移 将数字乘以2

3<<2=3*4=12  3<<1=3*2=6   3<<3=3*8=24

">>"位右移 将数字除以2

“>>” 表示右移,如果该数为正,则高位补0,若为负数,则高位补1。如:int i=15; i>>2的结果是3,移出的部分将被抛弃

6>>1=6/2=3   6>>3=6/8=0.75(取整数0)  6>>2=6/4=1.5(取整数1)

">>>"表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

package package_01;

public class Demo_3 {
    public static void main(String[] args) {
        /*
        <<叫做位左移 计算结果是乘以2
        比如我 2✖8=16 为2*2*2*2
        3<<2=3*4=12  3<<1=3*2=6   3<<3=3*8=24
        6>>1=6/2=3   6>>3=6/8=0.75(取整数0)  6>>2=6/4=1.5(取整数1)

        * */
        System.out.println(2<<3);//相当于2*(2^3)=2*8=16
        System.out.println(3<<4);//相当于3*(2^4)=3*16=48
        System.out.println("==========================");
        System.out.println(6>>1);//相当于6/(2^1)=6/2=3
        System.out.println(6>>2);//等于6/(2^2)=1余数为2,取整数为1
        System.out.println(6>>3);//等于6/(2^3)=0余数是2,取整数0
        System.out.println("=====================================");
        System.out.println(6>>>1);
        System.out.println(6>>>3);
    }
}

">>>“和”>>"区别

“>>”表示是带符号的右移:按照二进制把数字右移指定数位,符号位为正补零,符号位负补一,低位直接移除。“>>>”表示无符号的右移:按照二进制把数字右移指定数位,高位直接补零,低位移除。

package package_01;

public class Demo_04 {
    public static void main(String[] args) {
        int a=10;
        System.out.println("十进制:"+a+"二进制:"+Integer.toBinaryString(a));
        int b=a>>2;
        System.out.println("右移两位十进制:"+b+"右移两位二进制:"+Integer.toBinaryString(b));

        System.out.println("===========================================================");
        int c=10;
        System.out.println("十进制:"+c+"二进制:"+Integer.toBinaryString(c));
        int d=c>>>2;
        System.out.println("右移两位十进制:"+d+"右移两位二进制:"+Integer.toBinaryString(d));
        System.out.println("===============================================================");
        for (int i=0;i<10;i++){
            for (int j=0;j<500;j=j+5){
                System.out.println(j/(int)Math.pow(2,i));
                System.out.println(j>>>i);
            }
        }
    }
}
   for (int j=0;j<500;j=j+5){
            System.out.println(j/(int)Math.pow(2,i));
            System.out.println(j>>>i);
        }
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值