-1

"Unsigned int" 变成了一个简短的和返回的。这可能吗?如果可以怎么办?

呸呸呸。我忘记了带符号的数字是如何实现的。这个问题没有意义。不管怎么说,还是要谢谢你。我本来打算对自己投反对票,你可以这样做。

4

4 回答 4

1

听起来您希望有一种可以为您完成工作的基本类型,但我认为不存在。另一方面,我不认为创建一个可以完成工作的对象会太难。根据需要进行调整以使其变短。

公共类 SpecialInt {
 诠释 i = 0;

 公共无效集(int i){
  if ( i < 0 ) throw new IllegalArgumentException("不能为负");
  这个.i = i;
 }

 公共无效添加(int j){
  整数 t = i+j;
  if( t < i ) throw new IllegalArgumentException("overflow!");
  我 = t;
 }

 公共无效子(int j){
  诠释 t = ij;
  if( t > i ) throw new IllegalArgumentException("overflow!");
  我 = t;
 }

 公共无效多(int j){
  int mult_max = Integer.MAX_VALUE / i;
  if( j > mult_max ) throw new IllegalArgumentException("overflow!");
  我 *= j;
 }
}
于 2010-03-26T02:26:00.637 回答
1

我不确定我是否完全理解这个问题,但如果您确定您的 int 适合短(您的数字在 0 到 2^16 之间),您可以随时将您的 int 转换为短:

int i = 65536;
short s = (short) i;

并取回无符号值: int i2 = s & 0xFFFF; System.out.println(i2);

s & 0xFFFFs 向上转换为 int 并且位掩码会将负数“转换”为它的无符号值(有点)。请记住,短变量 -1 中的 FFFF 不是 65536。

于 2010-03-26T02:28:52.663 回答
0

如果你的整数没有任何特定的特征,比如我认为你做不到的倍数。

问题是包含在 int 中的信息(通常是 32 位架构)不能包含在 short 中。

正如你所看到的,Short.MAX_VALUE最大值是 2^15 - 1,因为一个 short 占用 16 位。所以你实际上失去了精度,你不能表达像 2²² 这样的整数。

于 2010-03-26T02:12:31.113 回答
0

如果你想要无符号类型,你可以使用Javolution库。

于 2010-03-26T04:43:44.283 回答