Java 中的无符号和有符号右移运算符
本文介绍 Java 中的有符号和无符号右移运算符。 它还通过代码示例演示了它们的用法。
Java 中的无符号和有符号右移运算符
与其他编程语言不同,Java 支持两个右移运算符。
- 有符号右移位,用符号 >> 表示。
- 无符号右移位,用符号 >>> 表示。
请注意
,其他编程语言(如 C、C++ 等)仅包含有符号右位移运算符 (>>
),但 Java 允许您使用有符号和无符号移位操作。
有符号右移运算符和无符号右移运算符之间的区别
有符号右移 (>>)
将数字的每一位向右移动并保留符号位(最左边的位)。 符号位用于保留数字的符号。 如果符号位为 0 或 1,则该数字分别为正数或负数。
另一方面,无符号右移 (>>>
) 也执行与有符号右移类似的操作,但不同之处在于,无符号右移总是用 0 填充最左边的位置,因为该值没有符号。
如果对正数应用无符号右移,它将显示与有符号右移相同的结果,但如果提供负数,则结果将为正,因为所有有符号位都被 0 替换。
有符号右位移位运算符 (>>
) 的示例:
让我们取一个数字-11,我们将向右移动 2 位。
+11 in 8-bit form = 0000 1011
1's Complement = 1111 0100
2's Compelement = +1
-----------------------------
2's Complement of -11 = 1111 0101
n = -11 = 1111 0101
Shift 1st bit = 1111 1010
Shift 2nd bit = 1111 1101
1111 1101
-1
------------------------------
1111 1100 = 1's Complement
0000 0011 = Complement of each bit
所以 -11 >> 2 = -3
是二进制 0000 0011。
无符号右移运算符 (>>>
) 示例:
n = 10 = 0000 1010 //the leftmost bit position is filled with '0' as 'n' is positive
现在将“3”位向右移动; 你可以直接做,但让我们一项一项地进行
n = 0000 1010
Shift 1st bit = 0000 0101
Shift 2nd bit = 0000 0010
Shift 3rd bit = 0000 0001
所以,n >>> 3 = 0000 0001 这将是十进制的 1。
我们还可以使用这个公式:(给定十进制数/2^n)
其中“n”是所需的轮班数,在我们的例子中,它是“3”。
所以,n >>> 3 = 10/2^3 = 10/8 = 1
请记住,在这两种情况下(有符号右移和无符号右移),所有移位的位都会丢失。
在 Java 中使用有符号右移位 (>>
)
我们在下面的示例中对数字执行了有符号右移操作。
示例代码:
public class SignedRightShift {
public static void main(String args[])
{
int a = -11;
System.out.println(a >> 2);
int b = 4;
System.out.println(b >> 1);
}
}
输出:
-3
2
Java 中无符号右移位 (>>>
) 的使用
下面的示例说明了对数字进行无符号右移操作。
示例代码:
public class UnsignedRightShift {
public static void main(String args[]){
// The binary representation of -1 is all "111..1".
int a = -1;
// The binary value of 'a >>> 29' is "00...0111"
System.out.println(a >>> 29);
// The binary value of 'a >>> 30' is "00...0011"
System.out.println(a >>> 30);
// The value of 'a >>> 31' is "00...0001"
System.out.println(a >>> 31);
}
}
输出:
7
3
1
相关文章
Java 中的菱形运算符
发布时间:2023/08/01 浏览次数:178 分类:Java
-
在本文中,我们将看到菱形运算符 的使用,并且我们将借助示例和解释来讨论该主题,以使该主题更容易。Java 中的菱形运算符
Java中的接口默认方法
发布时间:2023/08/01 浏览次数:125 分类:Java
-
本文介绍如何在Java中使用接口中的默认方法。Java中的接口默认方法 在接口只有抽象方法之前,Java 8 就引入了默认方法。 默认或防御方法允许开发人员在不破坏实现的情况下向接口添加新方法
Java 中的静态接口
发布时间:2023/08/01 浏览次数:73 分类:Java
-
请注意,当接口是嵌套的或另一个接口的子接口时,您可以将接口声明为静态。在 Java 的嵌套接口中使用 static
在 Java 中使用索引和 forEach
发布时间:2023/08/01 浏览次数:136 分类:Java
-
在本文中,我们将学习如何将 forEach() 函数与索引组合一起使用。 此外,我们将通过使用必要的示例和解释来涵盖该主题,以使该主题更容易。
Java 中的并行处理
发布时间:2023/08/01 浏览次数:128 分类:Java
-
在本文中,我们将了解 Java 中的并行处理,以及必要的示例和解释,以使主题变得更容易。并行处理和顺序处理之间的区别
Java 中的装饰器
发布时间:2023/08/01 浏览次数:80 分类:Java
-
装饰器设计模式使用户能够动态添加功能并设置对象的行为,而不影响其对象的行为。 为了扩展类的行为,装饰器大多使用继承。
将InputStream转换为Java中的文件对象
发布时间:2023/08/01 浏览次数:106 分类:Java
-
我们将根据 Java 版本,使用不同的方式编写不同的示例代码,将 InputStream 转换为 File 对象。 下面给出了一些方法:使用纯Java将InputStream转换为文件对象
Java 中的八皇后问题
发布时间:2023/08/01 浏览次数:189 分类:Java
-
本文介绍了 Java 中的八皇后问题。Java 中的八皇后问题 八皇后问题是我们必须将八个皇后放置在 8x8 的棋盘上,并且不能互相攻击。