迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 中的无符号和有符号右移运算符

作者:迹忆客 最近更新:2023/08/02 浏览次数:

本文介绍 Java 中的有符号和无符号右移运算符。 它还通过代码示例演示了它们的用法。


Java 中的无符号和有符号右移运算符

与其他编程语言不同,Java 支持两个右移运算符。

  1. 有符号右移位,用符号 >> 表示。
  2. 无符号右移位,用符号 >>> 表示。

请注意 ,其他编程语言(如 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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 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 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便