java运算符 与(&)非(~)或(|)异或(^)

Posted 逐梦寻欢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java运算符 与(&)非(~)或(|)异或(^)相关的知识,希望对你有一定的参考价值。

1.位异或运算(^)

运算规则是:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。

比如:8^11.

8转为二进制是1000,11转为二进制是1011.从高位开始比较得到的是:0011.然后二进制转为十进制,就是Integer.parseInt("0011",2)=3;

 

2.位与运算符(&)

运算规则:两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。

比如:129&128.

129转换成二进制就是10000001,128转换成二进制就是10000000。从高位开始比较得到,得到10000000,即128.

 

3.位或运算符(|)

运算规则:两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0。

比如:129|128.

129转换成二进制就是10000001,128转换成二进制就是10000000。从高位开始比较得到,得到10000001,即129.

 

4.位非运算符(~)

运算规则:如果位为0,结果是1,如果位为1,结果是0.

比如:~37

在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节,就是32字节,32bit.

8转为二进制是100101.

补码后为: 00000000 00000000 00000000 00100101

取反为:    11111111 11111111 11111111 11011010

因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。

因此,我们可将这个二进制数的补码进行还原: 首先,末尾减1得反码:11111111 11111111 11111111 11011001 其次,将各位取反得原码:

00000000 00000000 00000000 00100110,此时二进制转原码为38

所以~37 = -38. 

 

 

参考资料:

http://blog.csdn.net/u010841296/article/details/52850307(java 原码、反码、补码计算 以及 取反(~)运算

以上是关于java运算符 与(&)非(~)或(|)异或(^)的主要内容,如果未能解决你的问题,请参考以下文章

Java的位运算符详解实例——与(&)非(~)或(|)异或(^)

java运算符 与(&)非(~)或(|)异或(^)

java运算符 与(&)非(~)或(|)异或(^)

Java的位运算符详解实例——与(&)非(~)或(|)异或(^)

Java的位运算符详解实例——与(&)非(~)或(|)异或(^)(仅作记录)

与(&)非(~)或(|)异或(^)-java位运算