搜索内容

有一个问题?

如果您有任何疑问,可以在下面询问或输入您要寻找的!

1.6 Java位运算符详解与(&)、或(|)、非(~)、异或(^)

生成海报
兴趣使然的程序猿
阅读需:0

1.6 位运算

       位运算就是指对二进制数的运算,位运算尽管工作中非常少采用,可是其功效非常大,假如常常看源代码的佛门弟子一定常常见到位运算,假如不明白二进制位计算也就恍恍惚惚了,在这里小编小结了下四个基础位运算的应用。


1.6.1 &计算

       与运算就是指2个二进制数同样位另外为1则結果为1。

System.out.println(Integer.toBinaryString(7)+"&"+Integer.toBinaryString(8));
System.out.println(7&8);

       結果:
7&8
       7:0111
       8:1000
       做与运算只必须看数据较为小的数的十位数就可以,如7的二进制是111,一个int用32位系统来储存,那麼111前面所有是0做与运算始终为0,因此 两个数做与运算只必须从数据较为小的那一个数的最大位逐渐就可以。

       再看来下负值:

System.out.println(Integer.toBinaryString(-7)+"&"+Integer.toBinaryString(-8));
System.out.println(-7&-8);

在这里插入图片描述
       -7的二进制为11111111111111111111111111111001
       -8的二进制为11111111111111111111111111111000

       最先必须搞清楚电子计算机如何表明负值的,负值的表明方法应用的补码,补码是指的取反加1。如所述的正数7的二进制是111,取反变为000,加上1则是001。

       填补一句正数7的二进制111,int型用32位系统存,111前面所有是0,取反以后111变成了001,001前面也当然也是取反变成了1。
算得头皮发麻



1.6.2 |计算

       或运算则表明2个二进制数同样位有一个为1则为1。

System.err.println(Integer.toBinaryString(12)+"|"+Integer.toBinaryString(9));
System.err.println(12|9);

在这里插入图片描述
       1100|1001相当于1101,转化成10进制便是13。

       再看看负值:

System.err.println(Integer.toBinaryString(-12)+"|"+Integer.toBinaryString(9));
System.err.println(-12|9);

在这里插入图片描述
       留意或运算中因为负值的上位一定是1,因此 两个数做或运算,只需有一个负值,则結果为负。 0的二进制表明为111…,因此 0与任何数做或运算都为0。



1.6.3 ~计算

       有关~计算即取反实际操作,换句话说便是按位取反,1变为0,0变为1。
       有关~实际操作的叙述在网上许多都说的不太搞清楚,这里要搞清楚二进制和十进制全是表明数的方法,表明的值并沒有差别。例如1的二进制1,取反后变为0,上位从0变为1,因此 电子计算机会以负值的方法读111…1110,便是-2。

System.err.println("~1="+(~1)+"="+Integer.toBinaryString(~1));

在这里插入图片描述



1.6.4 ^计算

       ^异或运算表明2个二进制数同样位值不一样则为1,承担为0,仅有当同样位组成为1与0时为1。

System.err.println("7^5="+
        Integer.toBinaryString(7)+"^" +Integer.toBinaryString(5)+"=二进制"+
        Integer.toBinaryString(7^5)+"=十进制"+(7^5));

在这里插入图片描述


1.6.5 总结

       位运算也有许多奇妙的实际操作,也有各种各样特性沒有提及,例如在java.util结合架构源代码里许多有关二进制的实际操作,别的java源代码中也有很多二进制的计算,由于二进制运算高效率高些,在越最底层的编码里应用的也越大。小编在这里仅仅毛遂自荐待诸位深层次,热烈欢迎与小编探讨。

相关标签:
评论
  • 消灭零回复