当前位置: 首页 > 面试题库 >

如何在Java 8和Java 9中使用未签名的Integer?

柳韬
2023-03-14
问题内容

在Oracle“原始数据类型”
页面中,它提到Java
8添加了对无符号int和long的支持:

int:默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-2 31,最大值为2 31 -1。 在Java SE
8和更高版本中,可以使用int数据类型表示无符号的32位整数,其最小值为0,最大值为2 32
-1。
使用Integer该类可将int数据类型用作无符号整数。有关更多信息,请参见“数字类”部分。像静态方法compareUnsigneddivideUnsigned等已被添加到Integer类,以支持算术运算的无符号整数。

longlong数据类型是64位二进制补码整数。带符号long的最小值为-2 63,最大值为2 63 -1。 在Java SE
8和更高版本中,可以使用long数据类型来表示无符号的64位long,其最小值为0,最大值为2 64
-1。
当您需要一个比int提供的值宽的值范围时,请使用此数据类型。该Long班还包含方法,如compareUnsigneddivideUnsigned等支持算术运算的无符号long

但是,我发现没有办法声明无符号的long或integer。例如,以下代码在应在范围内时(给出的值恰好是2 64
-1)给出了“文字超出范围”(当然,我使用Java 8)的编译器错误消息。:

public class Foo {
    static long values = 18446744073709551615L;

    html" target="_blank">public static void main(String[] args){
        System.out.println(values);
    }  
}

那么,有什么方法可以声明一个无符号的int或long?


问题答案:

根据您发布的文档以及此博客文章 -声明未签名的int / long和已签名的int /
long之间的原语没有区别。“新支持”是在Integer和Long类中添加了静态方法,例如Integer.divideUnsigned。如果不使用这些方法,则2 ^ 63-1以上的“无符号”长整型是带有负值的普通旧长整型。

快速浏览一下,似乎没有办法在+/- 2 ^ 31-1或超出+/- 2 ^ 63-1的范围内声明整数常量。您将必须手动计算与超出范围的正值相对应的负值。



 类似资料:
  • 在Oracle“原始数据类型”页面中,它提到Java8增加了对无符号int和long的支持: 那么,有没有办法声明一个无符号的int或long呢?

  • 我使用Java-8编译器编译了以下代码:

  • 我有一个包含EC私钥的文件: 我有一个证书,它的公钥对应于私钥: 在 pem 格式中: 以txt格式: 我正在努力完成两件事: < li >使用ecdsa-with-SHA256签名算法使用私钥对字节数组进行签名 < li >使用证书中的公钥验证签名是否正确 我尝试过使用充气城堡图书馆。这是我到目前为止所拥有的。我的断言是失败的。

  • 我正在尝试使用pdfbox库签署pdf。我现在卡住了,真的需要帮助。 这是我的代码: 然后我正在保存我的pdf,但是:1)我注意到sign method从来没有被调用2)我应该在哪里附加CertyFicate?在sign method中? 以下是我保存PDF的方法:

  • 在IDE上执行程序时,它不会给出任何输出。我原以为它会给出。

  • =>如何正确地将log4j作为Java9的一个模块依赖项包含进来? (我对以下依赖项有相同的问题:需要Hibernate.core;需要Hibernate.jpa.2.1.api;需要JCommander;需要JUnit;需要Reflections;) 到目前为止我所做的: 更新了pom.xml文件中的log4j版本,因为log4j 1.2似乎不能与Java9一起工作(请参阅https://blo