Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)

Java 逻辑运算符、位运算符、移位操作符  总结     《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》作者:王可利(Star·星星)

 

 

逻辑运算符,表格如下:

《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》

 

解析逻辑运算符表:

1.与 (&) 

特点:两个都为真的时候,结果为真。两个为假的时候,结果为假。如果存在一个是假的,结果都为假的。

2.或(|)

特点:两个都为真的时候,结果为真。两个都为假的时候都是假的。如果存在一个是真的,结果都为真的。

3.异或(^)

特点:异,表示不一样的意思。所以两个判断都是一样的情况下,结果为假。两个判断结果都是不一样的情况下,结果为真的。

4.非(!)

特点:取非,如果是真的,那么结果就为假的。如果是假的,那么结果就为真的。

5.双与(&&)、双或 (||)  ——>短路

特点:

在java里面,单个与(或) 和  两个与(或)运算方式是不一样,结果是一样的。

单个与(或)会把所有的条件都判断一次,运算方式,不管第一个条件是假的还是真的,都会把后面的条件判断完了之后再输出结果。

两个与(或),如果第一个数是真的,或者是假的就直接运行了,就不会再判断后面的条件,但是输出的结果真假和单与(或)没什么不一样。

所以单个与(或)要比 两个 两个与(或)效率稍微高了一点。

 

《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》

位运算符

 介绍:任何信息在计算机中都是以二进制的形式保存的,与(&)或(|)异或(^)除了可以作为逻

    辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。

位(bit)运算符:

 

位运算符

 

运算符含义

 

&

与(AND

|

或(OR

^

异或

~

取反

规则:非零即真,所以 1 为 true ,0 为 false

参考逻辑运算符可以得出以下结论:

    只有参与运算的两位都为1&运算的结果才为1,否则就为0

    只有参加运算的两位都是0| 运算的结果才是0,否则都是1

    只有参加运算的两位不同,^ 运算的结果才为1,否则就为0

1与运算

& 参见运算的两位数都为1&运算符结果才为1,否则就为0

6 & 3

00000000

00000000

00000000

00000110

6

00000000

00000000

00000000

00000011

3

00000000

00000000

00000000

00000010

& = 2

 

 

 

 

 

2| 或运算

| 参与运算的两位都为0|运算的结果才为0,否则就为1

6 & 3

00000000

00000000

00000000

00000110

6

00000000

00000000

00000000

00000011

3

00000000

00000000

00000000

00000111

| = 7

 

 

 

 

 

3^ 异或运算

^只有参加运算的两位不同,^运算的结果才为1,否则就为0

6 & 3

 

00000000

00000000

00000000

00000110

6

00000000

00000000

00000000

00000011

3

00000000

00000000

00000000

00000101

^ = 5

 

 

 

 

 

4、~ 反码

就是取反,二进制只有10,取反就是如果为1,取反就是0,如果是0,取反就是1

0000-0000

0000-0000

0000-0000

0000-0110

6

1111-1111

1111-1111

1111-1111

1111-1001

取反 -7

 

 

 

System.out.println(~6);//-7

结论:当参与取反的数值是正数时,把对应的值加上负号,再-1

     当参与取反的数值是负数时,把对应的值加上负号,再-1

负数的表现形式就是对应的正数取反,再加1。负数的最高位肯定是1

负数表示

负数对应的正数的二进制-1,然后取反。

-6

 

0000-0000

0000-0000

0000-0000

0000-0110

6

1111-1111

1111-1111

1111-1111

1111-1001

取反

1111-1111

1111-1111

1111-1111

1111-1010

1

 

 

 

 

 

5、异或特点

一个数异或同一个数两次,结果还是那个数用处一个简单的加密思想.

6^3^3

 

0000-0000

0000-0000

0000-0000

0000-0110

6

0000-0000

0000-0000

0000-0000

0000-0011

^3

0000-0000

0000-0000

0000-0000

0000-0101

前面的结果

0000-0000

0000-0000

0000-0000

0000-0011

^3

0000-0000

0000-0000

0000-0000

0000-0110

结果是6

 

 

 

 

 

 

 

《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》《Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)》

移位操作符

表格如下:

位运算符

 运算符

 运算

 范例

 << 

 左移

 3 << 2 = 12 –> 3*2*2=12

 >> 

 右移

 3 >> 1 = 1  –> 3/2=1

 >>> 

 无符号右移

 3 >>> 1 = 1 –> 3/2=1

 &

 与运算

 6 & 3 = 2

 |

 或运算

 6 | 3 = 7

 ^

 异或运算

 6 ^ 3 = 5

 ~

 反码

 ~6 = –

 

位运算符的细节

 << 

 空位补0,被移除的高位丢弃,空缺位补0

 >> 

 被移位的二进制最高位是0,右移后,空缺位补0

 最高位是1,空缺位补1

 >>> 

 被移位二进制最高位无论是0或者是1,空缺位都用0补。

 &

 二进制位进行&运算,只有1&1时结果是1,否则是0;

 |

 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1;

 ^

 任何相同二进制位进行 ^ 运算,结果是0。   1^1=0 , 0^0=0

 不相同二进制位 ^ 运算结果是1。  1^0=1 , 0^1=1

解析表内容:

1、左移(算术移位)

3 << 2 

首先将3转换为2进制,

00000000

00000000

00000000

00000011

3 的二进制

00000000

00000000

00000000

000011

左移2位,砍掉高位

0000 0000

0000 0000

0000 0000

0000 1100

低位补0

       

 

 

 

 

 

 

结果是12,所以3<<2 = 12;

结论:左移就相当于乘以2的位移个数次幂.

2、右移

6>>2

 00000000

00000000

00000000

00000110

6的二进制

000000

00000000

00000000

00000001

右移10被砍掉

 00000000

00000000

00000000

00000001

高位补0

       

 

 

 

 

 

 

结果是1,所以6>>2 = 1;

结论:右移两位就是除以 22次方,右移一位就是除以 2的一次方。一个数往左移越移越大,往右边移越来越小。

 

3、无符号右移(逻辑移位)

通过演示发现右移时高位就空了出来,>> 右移时高位补什么要按照原有数据的最高位来决定。

1111-1111 1111-1111 1111-1111 1111-1010    -6 >> 2

1111-1111 1111-1111 1111-1111 1111-0010   

最高位补什么要看原有最高位是什么

那么使用>> 后原来是最高位1 的那么空出来的最高位还是1 的,是0的还是0

如果使用>>> 无论最高位是0还是1 空余最高位都拿0 ,这就是无符号右移。

1111-1111 1111-1111 1111-1111 1111-1010    -6 >>> 2

001111-1111 1111-1111 1111-1111 1111-10   

 

结果是;1073741822 

 

 

    原文作者:王可利(Star·星星)
    原文地址: http://www.cnblogs.com/StarKL/p/6089503.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞