使用最少内存对java中无符号数的操作

时间:2017-07-03 12:08:20

标签: java

因为我们知道Java不支持无符号运算,因为它将最后一位视为所有整数的符号位。 我知道一种方法是使用为操作中涉及的数字定义的更大的大小。例如,如果你想要32位操作,你可以用64位的long来做,然后考虑底部的32位作为结果。 但重点是,它需要双重记忆。 我读了一些关于使用类整数的东西,但我不理解它。您是否有任何想法使用最少的内存进行无符号操作? 谢谢!

2 个答案:

答案 0 :(得分:0)

"签名"和#34;未签名"关于将位模式解释为数值。大多数(所有?)现代CPU(和JVM)对有符号数使用Two's Complement表示,具有加法和减法的有趣属性,位模式操作与无符号数相同。

E.g。在16位中,模式0xfff0在解释为无符号时为65520,在有符号数时为-16。从该数字中减去16(0x0010)得到0xffe0,它表示有符号(为-32)和无符号情况(65504)的正确结果。

所以,取决于您对数字进行的操作,有些情况下您可以忽略签名/未签名的问题 - 只需注意输入和输出。

关于使用较短表示的相关性,只有你能说出来。在做数字时,Java可以非常快。我记得很多年前的编码竞赛,即使是Java 1.4也超过了Microsoft C(两者都有默认设置 - 优化开关C的速度要快一些。)

答案 1 :(得分:0)

<块引用>

正如我们所知,Java 不支持无符号运算,因为它将最后一位视为所有整数的符号位。

这是错误的。

虽然Java不支持32位和64位无符号整数类型,但它确实支持无符号整数操作;请参阅 IntegerLong 类型的 javadoc,并查找 xxxUnsigned 方法。

请注意,您不会看到加法、减法或乘法方法,因为它们会返回与原始运算符相同的表示。

简而言之,您可以使用 32 位有符号 int 类型进行 32 位无符号算术和比较运算。

更多信息: