学习笔记(2):逻辑运算符和位运算符

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

public class Demo1{
    public static void main(String[] args) {
        boolean A = true;
        boolean B = false;
        System.out.println(" A && B =  " + (A&&B) );
        System.out.println(" A || B =  " + (A||B) );
        System.out.println(" !A =  " + !A );
    }
}

结果如下: 

 A && B = false
 A || B = true
 !A = false


 短路运算

&&和||的短路运算,是指如果前面的判断条件已经明确结果则不执行后面的判断

例如:

public class Demo1{
    public static void main(String[] args) {
        int A = 10;
        boolean B = (A<9) && (A++<20);
        System.out.println("B = " + B);
        System.out.println("A = " + A);

        boolean C = (A<9) || (--A == 9);
        System.out.println("C = " + C);
        System.out.println("A = " + A);
    }
}

 结果如下: 

B = false
A = 10
C = true
A = 9

当判断到(A<9)为假时,将不再执行后面的运算判断,即(A++<9)没有被执行

&、&&的区别

&&执行短路运算,效率比&高,只要&&左边存在false,右边不执行;

&物理左边是false还是true,右边都执行。

注:同理可得|和||的区别


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

注:以下数据类型默认为byte-8位

&:与运算,即如果对应位都是1得1,否则为0

例如:

   0010 1101

& 0110 0111 

   0010 0101


| :或运算,即如果对应位都是0为0,否则为1

例如:

   0010 1101

|  0110 0111 

   0110 1111


^:异或运算,即对应位相同则为0,不相同则为1

例如:

   0010 1101

^  0110 0111 

    0100 1010


~:取反运算,即原位为1,取反后为0,反之亦然

A  =0011 1010

~A=1100 0101


<<:表示将操作数左移一位,不分正负数,并在低位补0

        byte a = 8;
        System.out.println(a<<2);

正数a=

8的二进制补码:0000 1000

a<<2,即为8的二进制补码左移两位后得到:0010 0000

0010 0000转换为十进制:a<<2 = 32

左移运算符<<可看作是操作数乘以n2

如上a<<2可以看作为a*2*2,但是使用左移运算符是比直接用*运算符要快的,因为这样是直接对底层二进制数进行运算,效率更高

!!注意二进制数范围(byte为-128——127)


>>:表示将操作数右移一位,如果操作数为正数,高位补0;负数则高位补1

——————————————————————右移运算符>>可看作是操作数除以n次2

正数a=

8的二进制补码:0000 1000

a>>2,即为8的二进制补码左移两位后得到:0000 0010

0010 0000转换为十进制:a>>2 = 2

 

负数a=-20

-20的二进制原码为:1001 0100

                   反码为:1110 1011除最高位符号位,其余位取反

                   补码为:1110 1100反码+1

右移两位后的补码为:1111 1011

                     反码为:1111 1010

                     原码为:1000 0101

            a>>2结果为:-5


 >>>:表示无符号右移,也称为“逻辑右移”,即若操作数为正,则高位补0;若操作数为负,则右移后高位同样补0

正数a>>>2的结果与a>>2的结果是一样的

负数a=-24

注:以下数据类型默认为int 32位

-24原码:10000000 00000000 00000000 00011000

     反码:11111111 11111111 11111111 11100111

     补码:11111111 11111111 11111111 11101000

右移2位:0011111111 11111111 11111111 111010

a>>>2=1073741818

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值