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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,