java------按位运算

在日常开发中位运算不会很常用到,如果能够巧妙的使用位运算可以大量减少运行开销,优化算法。在java中一共有七种位运算符

1.&:按位与

两个操作数对应位同为1时,结果为1,其余全为0。(或者是只要有一个操作数为0,结果就为0)。

将2个操作数和结果都转换为二进制进行比较:
5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011

1按位与运算后:0000 0000 0000 0000 0000 0000 0000 0001


System.out.println(5&3);

2.|:按位或

两个操作数对应位同为0时,结果为0,其余全为1。(或者是只要有一个操作数为1,结果就为1)。

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011

7按位或运算后:0000 0000 0000 0000 0000 0000 0000 0111
System.out.println(5 | 3);//结果为7

3.~:按位非

第n位为1,那么按位非的结果是第n位变为0,反之亦然。

System.out.println(~5);//结果为-6

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

-6按位非运算后:1111 1111 1111 1111 1111 1111 1111 1010

补:有朋友对这里-6怎么算的不太理解,我简单解释一下:

5的2进制表示(假设只用4比特表示,最高比特为符号位)是0101,0101按位取反后是1010。1010是补码,取反(符号位不变)加1后就是原码。取反后是1101,加1后是1110(是10进制的-6),所以~5等于-6。

 

posted on 2024-03-26 17:08  无名之辈的ggb  阅读(1)  评论(0编辑  收藏  举报