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

有无符号数字类型包装器的Java库吗?

桂和同
2023-03-14
问题内容

显然,Java本身不支持无符号数字类型,并且这种情况不会很快改变(注释从2002年开始)。但是,当使用数据库(例如MySQL)时,它们有时可能会派上用场。关于如何模拟无符号数字有很多问题。例如:

  • Java中的unsigned short

所有这些肤浅描述它是如何 _能_做到。但是它有什么实际图书馆去所有的方式和实施适当的包装UByteUShortUIntegerULong?最好,这些包装器将扩展java.lang.Number并提供类似于的算术API
java.math.BigInteger

从本文档中可以看出,有很多需要考虑的地方,还有很多可能出错的地方(例如,如何按位移位,如何相乘等),所以我不想自己做。另外,我不想只使用下一个更高的类型(例如,Short代替Byte,等等)。我想的概念8-bit16-bit32-bit64-bit号码保留,与数据库提供最好的交互,例如。

更新

在您回答之前!考虑到我知道所有解决方法,但是我真的很想拥有具有上述属性的这4种类型。也许有人已经这样做了,所以这就是我问的原因。无需提醒我解决方法。


问题答案:

当我需要在jOOQ内使用此功能时,我还没有找到类似的东西,因此我推出了自己的开源库,称为jOOU(U代表Unsigned):

http://github.com/jOOQ/jOOU

据我所知,有些人可能认为这是矫枉过正,但我真的很想有恰恰是那些包装包装什么其他语言调用ubyteushortuintulong。希望有了Valhalla,这些包装器可以变成值类型。

当然,非常欢迎对算术/按位运算实现有所贡献!



 类似资料:
  • 问题内容: 关于Java支持哪种无符号数据类型,我有些困惑。 我已经读过了,但我不理解它的非常复杂的解释(至少对我而言)。 问题答案: Java仅支持带符号的类型(除外),因为它假定对于初学者来说,一种类型比每种大小都具有两种类型更容易理解。在C语言中,它被认为是错误的根源,因此不包括对无符号类型的支持。 因此设计师选择了四种尺寸 ,8位 ,16位 ,32位 ,64位。 并保持一致性,他们都签署就

  • 问题内容: 我想了解如何将带符号的数字转换为无符号的数字。 可以说我有这个: 为了使其无符号,我必须选择“更大”的数据类型“ short”,并应用值为0x00ff的AND运算符。 为什么使数字无符号? 问题答案: Java实际上没有无符号原语。 值127实际上由“ 01111111”表示,第一位是符号(0为正)。 一个无符号字节将能够保存0到255的值,但是127是有符号字节的最大值。由于一个字节

  • 引用oracle网站“byte:字节数据类型是一个8位有符号二补码整数。它的最小值为-128,最大值为127(含)”。 在这里,前两行有效,但最后一行无效 Q1)8位有符号到底是什么意思?二进制格式的128将是1000 0000,-128需要一个额外的负号位,如果所有8位都被占用,它将适合。 Q2)对于int,有一个无符号右移运算符,但这对于字节似乎是非法的,为什么会这样。无法防止字节溢出。在in

  • 本文向大家介绍Java Float包装器类,包括了Java Float包装器类的使用技巧和注意事项,需要的朋友参考一下 Float是提供的包装类,用于包装float基本值。 让我们创建一个带有float原语的Float对象。 现在让我们从字符串创建一个Float对象。 下面的示例显示了上面讨论的两种输出方法。 示例 输出结果

  • 问题内容: Java中的字节默认为带符号的。我在其他帖子上看到具有无符号字节的解决方法类似于以下内容: 有人可以向我解释为什么这样做有效,并将有符号字节转换为无符号字节,然后将其转换为整数吗?具有11111111的字节导致相同的字节-对吗? 问题答案: 类型转换的优先级高于运算符。因此,您首先要转换为一个int,然后再进行ANDing以掩盖所有已设置的高阶位,包括java所用的二进制补码表示法的“