Java 逻辑运算符、位运算符、移位操作符  总结     作者:王可利(Star·星星)

逻辑运算符,表格如下:

解析逻辑运算符表:

1.与 (&)

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

2.或(|)

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

3.异或(^)

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

4.非(!)

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

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

特点:

在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

移位操作符

表格如下:

位运算符

 运算符

 运算

 范例

 <<

 左移

 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的位运算符实例——与(&)、非(~)、或(|)、异或(^)

    一.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的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

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

  7. 恶补java基础 位运算符

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

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

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

  9. Java的位运算符—— 与(&)、非(~)、或(|)、异或(^)

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

随机推荐

  1. 传智Java基础知识测试

    共40道选择题,每题2.5分.多选题有错则全错,全对才满分. 单选题: 1.   下列哪个声明是错误的?(B) A.  int  i=10; B.  float  f=1.1; C.  double  ...

  2. 土法炼钢:怎么实现一个简单的B+Tree In-Disk

    1. 写在前面 说起B+树,大家应该都很熟悉.B+树是一种平衡的多路搜索树,广泛在操作系统和数据库系统用作索引.相比于内存的存取速度,磁盘I/O存取的开销要高上几个数量级.而将B+树用作索引时,它可以 ...

  3. linux取某个字段排重

    排重统计 cat a.txt | awk -F ';' '{print $2}' | sort -u | wc -l

  4. rsync安装使用

    安装 yum install rsync mkdir /etc/rsyncd cd /etc/rsyncd vi rsyncd.conf pid file = /var/run/rsyncd.pid ...

  5. CSS常用布局整理(二)

    1-2-1单列变宽布局 side列定宽300px,content列变宽,尺寸是100%-300px.核心的问题就是浮动列的宽度应该等于“100% - 300px”,而CSS显然不支持这种带有减法运算的 ...

  6. dell 交换机 双链路冗余

    公司海外机房引入2G带宽,是由2个电口绑定实现的.因业务需要扩容到3G,在绑定端口扩展性不太好,因此直接上10G光纤模块. 机房技术人员建议,2g老线路不撤做备份,3g新线路在线使用.使用STP协议实 ...

  7. mac ping ip地址

    Mac下有个类似于Windows下CMD的模式叫做终端,但是这个模式和Windows下的CMD有着很大的差别. 工具/原料 Mac电脑一台 方法/步骤   首先通过菜单栏的搜索功能找到“终端”,也可以 ...

  8. iOS 支付宝支付集成获取私钥

    http://doc.open.alipay.com/doc2/apiList?docType=4 登录到支付宝开放平台,下载相关支付宝支付的demo.解压出来有3个文件夹.(服务端demo,客户端 ...

  9. php中实现17种正则表达式

    php中实现17种正则表达式 该教程来自:php教程网:http://php.662p.com "^\d+[ DISCUZ_CODE_1 ]quot; //非负整数(正整数 + 0) &qu ...

  10. Objective-C中的self和super

    1.有过面向对象的人知道,self相当于this,super相当于调用父类的方法 2.self是类的隐藏的参数,指向当前调用方法的类,另一个隐藏参数是_cmd,代表当前类方法的selector. su ...