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

时间:2022-09-26 17:37:03

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、~ 反码

就是取反,二进制只有1和0,取反就是如果为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,然后取反。

-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、右移

6>>2

00000000

00000000

00000000

00000110

6的二进制

000000

00000000

00000000

00000001

右移10被砍掉

00000000

00000000

00000000

00000001

高位补0

             

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

次方,右移一位就是除以 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

Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)的更多相关文章

  1. Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...

  2. Java 需要记得、了解的关键词 (Java 学习中的小记录)

    Java 需要记得.了解的关键词 (Java 学习中的小记录)     作者:王可利(Star·星星) 总结:本次随笔,仅且拿来平时翻阅记忆用

  3. Java学习中,常用的命令管理(Java 学习中的小记录)

    Java学习中,常用的命令管理      作者:王可利(Star·星星) 一.Window中常见的dos命令 在哪里操作dos命令: Win7 ---> 开始  ---->所有程序---& ...

  4. Java的位运算符实例——与(&amp&semi;)、非(~)、或(&vert;)、异或(&Hat;)

    一.Java的位运算符实例——与(&).非(~).或(|).异或(^) 1.与(&) 0 & 2 = 0 0 0 0 0 1 0 0 1 0 2.非(~) ~0 = 7 0 0 ...

  5. Java基础-位运算符Bitwise Operators

    Java基础-位运算符Bitwise Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.位运算特点 位运算符分为按位与(&),按位或(|),按位异或(^ ...

  6. Java的位运算符详解实例——与(&amp&semi;)、非(~)、或(&vert;)、异或(&Hat;)

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

  7. 恶补java基础 位运算符

    以前不知道在哪看过别人写博客里的一句话  “越学的深入觉得自己会的东西越少”.最近研究了一下java的基础算法  hash表 被一些位运算符搞的头都大了 决心花一些时间研究一下以前一直觉得没用的东西! ...

  8. Java的位运算符与二进制转换

    转换: Java整型数据类型有:byte.char.short.int.long.要把它们转换成二进制的原码形式,必须明白他们各占几个字节.,一个字节==8位数 数据类型                ...

  9. Java的位运算符—— 与(&amp&semi;)、非(~)、或(&vert;)、异或(&Hat;)

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

随机推荐

  1. 大坑!常被忽视又不得不注意的小细节——&percnt;I64&comma;&percnt;lld与cout&lpar;转载&rpar;

    原地址:http://blog.csdn.net/thunders01/article/details/38879553 刚刚被坑完,OI一年了才知道%I64和%lld有区别(做题会不会太少),lon ...

  2. ListView下拉刷新及上拉更多两种状态

    一.前言: 很多应用都会用到ListView,当然如果是iOS就会用UITableViewController,这两个控件在不同的OS上,功能是一样的,只是有些细微的不同(iOS的UITableVie ...

  3. anaconda安装加速镜像问题解决

    Anaconda使用conda连接网络出现错误 我使用的是windows10 64bit下的Anaconda2,在安装和更新包的时候出现以下报错信息. 这是使用默认源安装包的报错信息: C:Users ...

  4. scrapy相关:splash安装 A javascript rendering service 渲染

    0. splash: 美人鱼  溅,泼 1.参考 Splash使用初体验 docker在windows下的安装 https://blog.scrapinghub.com/2015/03/02/hand ...

  5. redis权限认证及登录

    找到配置文件 redis.conf 找到   requirepass 字段 去掉注释,改为  requirepass  yourpassword 重启redis: service redis rest ...

  6. Java 输入流(一)ByteArrayInputStream

    概述 ByteArrayInputStream类是从内存中的字节数组中读取数据,因此它的数据源是一个字节数组.

  7. Netty实现一个简单聊天系统(点对点及服务端推送)

    Netty是一个基于NIO,异步的,事件驱动的网络通信框架.由于使用Java提供 的NIO包中的API开发网络服务器代码量大,复杂,难保证稳定性.netty这类的网络框架应运而生.通过使用netty框 ...

  8. Django模型层之多表操作

    ----------------https://www.cnblogs.com/liuqingzheng/articles/9499252.html 实例:我们来假定下面这些概念,字段和关系 一 创建 ...

  9. numpy中的数学

    1.dot,exp v = np.dot(arg1,arg2) #矩阵乘法 v2 = np.exp() # e的-x 次方

  10. Java Agent初探——动态修改代码

    用了一下午总算把java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘... 通过java agent可以动态修改代码(替换.修改类的定义),进行AOP. 目标: ? 1 为所有添加@ ...