返回
java位运算符本质推算
后端
2023-12-02 16:51:49
位运算符简介
位运算符是一种按位操作的运算符,它直接对二进制位进行操作。Java中常用的位运算符有:
- 左移(<<):将操作数的二进制位向左移动指定位数,空出的低位补0。
- 右移(>>):将操作数的二进制位向右移动指定位数,空出的高位补0(有符号右移)或1(无符号右移)。
- 按位与(&):将两个操作数的二进制位逐位相与,结果为0或1。
- 按位或(|):将两个操作数的二进制位逐位相或,结果为0或1。
- 按位异或(^):将两个操作数的二进制位逐位相异或,结果为0或1。
- 位反(~):将操作数的二进制位逐位取反,结果为0或1。
二进制的原码、反码和补码
在理解位运算符的工作原理之前,我们需要先了解二进制的原码、反码和补码。
- 原码:原码是最简单的二进制表示形式,正数的原码就是其本身,负数的原码是在其绝对值的最高位加一个负号(-)。
- 反码:反码是原码的按位取反,即把0变成1,把1变成0。
- 补码:补码是反码加1,即把最低位的0变成1,把最高位的1变成0。
位运算符的推算过程
左移(<<)
左移运算符将操作数的二进制位向左移动指定位数,空出的低位补0。例如:
int a = 10; // 二进制为 0000 1010
a << 2; // 二进制为 0010 1000
在这个例子中,a的二进制位向左移动了2位,空出的低位补0,因此结果为0010 1000(十进制20)。
右移(>>)
右移运算符将操作数的二进制位向右移动指定位数,空出的高位补0(有符号右移)或1(无符号右移)。例如:
int a = 10; // 二进制为 0000 1010
a >> 2; // 二进制为 0000 0010(有符号右移)
a >>> 2; // 二进制为 0000 0010(无符号右移)
在这个例子中,a的二进制位向右移动了2位,有符号右移时,空出的高位补0,因此结果为0000 0010(十进制2);无符号右移时,空出的高位补1,因此结果也是0000 0010(十进制2)。
按位与(&)
按位与运算符将两个操作数的二进制位逐位相与,结果为0或1。例如:
int a = 10; // 二进制为 0000 1010
int b = 5; // 二进制为 0000 0101
a & b; // 二进制为 0000 0000
在这个例子中,a和b的二进制位逐位相与,结果为0000 0000(十进制0)。
按位或(|)
按位或运算符将两个操作数的二进制位逐位相或,结果为0或1。例如:
int a = 10; // 二进制为 0000 1010
int b = 5; // 二进制为 0000 0101
a | b; // 二进制为 0000 1111
在这个例子中,a和b的二进制位逐位相或,结果为0000 1111(十进制15)。
按位异或(^)
按位异或运算符将两个操作数的二进制位逐位相异或,结果为0或1。例如:
int a = 10; // 二进制为 0000 1010
int b = 5; // 二进制为 0000 0101
a ^ b; // 二进制为 0000 1111
在这个例子中,a和b的二进制位逐位相异或,结果为0000 1111(十进制15)。
位反(~)
位反运算符将操作数的二进制位逐位取反,结果为0或1。例如:
int a = 10; // 二进制为 0000 1010
~a; // 二进制为 1111 0101
在这个例子中,a的二进制位逐位取反,结果为1111 0101(十进制-11)。
结语
本文介绍了Java位运算符的原理和使用,希望对读者有所帮助。更多关于Java位运算符的知识,可以参考Java官方文档或其他相关资料。