详解Java的位运算
什么是位运算
位运算是计算机中一种对数值的二进制位进行操作的一种运算。在Java中,主要有以下几种位运算符:
运算符 | 描述 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位取反 |
<< | 左移位 |
>> | 右移位 |
>>> | 无符号右移位 |
按位与(&)
按位与是将两个操作数的每一位进行比较,都为1时才返回1,否则返回0。
示例1:
int a = 60; // 二进制为 0011 1100
int b = 13; // 二进制为 0000 1101
int c = a & b; // 二进制为 0000 1100,即十进制的12
示例2:
int a = 10; // 二进制为 0000 1010
int b = 15; // 二进制为 0000 1111
int c = a & b; // 二进制为 0000 1010,即十进制的10
按位或(|)
按位或是将两个操作数的每一位进行比较,只有有一个为1时就返回1,否则返回0。
示例1:
int a = 60; // 二进制为 0011 1100
int b = 13; // 二进制为 0000 1101
int c = a | b; // 二进制为 0011 1101,即十进制的61
示例2:
int a = 10; // 二进制为 0000 1010
int b = 15; // 二进制为 0000 1111
int c = a | b; // 二进制为 0000 1111,即十进制的15
按位异或(^)
按位异或是将两个操作数的每一位进行比较,只有其中一个为1时返回1,否则返回0。
示例1:
int a = 60; // 二进制为 0011 1100
int b = 13; // 二进制为 0000 1101
int c = a ^ b; // 二进制为 0011 0001,即十进制的49
示例2:
int a = 10; // 二进制为 0000 1010
int b = 15; // 二进制为 0000 1111
int c = a ^ b; // 二进制为 0000 0101,即十进制的5
按位取反(~)
按位取反是将一个操作数的每一位取反,0变为1,1变为0。
示例1:
int a = 60; // 二进制为 0011 1100
int b = ~a; // 二进制为 1100 0011,即十进制的-61
示例2:
int a = 10; // 二进制为 0000 1010
int b = ~a; // 二进制为 1111 0101,即十进制的-11
左移位(<<)
左移位是将一个操作数的二进制码向左移动指定的位数,低位补0。
示例1:
int a = 60; // 二进制为 0011 1100
int b = a << 2; // 二进制为 1111 0000,即十进制的240
示例2:
int a = 10; // 二进制为 0000 1010
int b = a << 3; // 二进制为 0101 0000,即十进制的80
右移位(>>)
右移位是将一个操作数的二进制码向右移动指定的位数,高位补符号位。
示例1:
int a = 60; // 二进制为 0011 1100
int b = a >> 2; // 二进制为 0000 1111,即十进制的15
示例2:
int a = -10; // 二进制为 1111 0110(32位环境下)
int b = a >> 2; // 二进制为 1111 1101(32位环境下),即十进制的-3
无符号右移位(>>>)
无符号右移位是将一个操作数的二进制码向右移动指定的位数,高位补0。
示例1:
int a = 60; // 二进制为 0011 1100
int b = a >>> 2; // 二进制为 0000 1111,即十进制的15
示例2:
int a = -10; // 二进制为 1111 1111 1111 1111 1111 1111 1111 0110
int b = a >>> 2; // 二进制为 0011 1111 1111 1111 1111 1111 1111 1101,即十进制的1073741821
总结
通过本文的详细讲解,我们了解了Java中的位运算及其用法。在实际开发中,我们可以根据实际需求合理运用这些运算符,提高代码的效率和可读性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java的位运算 - Python技术站