在java中,是否可以打包一个预期不为负数的整数&;是否最终(不是溢出)为短?

在java中,是否可以打包一个预期不为负数的整数&;是否最终(不是溢出)为短?,java,integer,packing,short,Java,Integer,Packing,Short,将“Unsigned int”转换为短整数和反整数。这可能吗?如果是这样,怎么做 Grrrr。我忘了带符号的数字是如何实现的。这个问题毫无意义。无论如何,谢谢你。我本来打算自己投反对票,你可以改为投反对票。如果你的整数没有任何特定的特征,比如是某个东西的倍数,我认为你不能 问题是int(通常是32位体系结构)中包含的信息不能包含在short中 从Short.MAX\u VALUE可以看出,最大值是2^15-1,因为Short占用16位。。所以你实际上失去了精度,你不能表达像2这样的整数。听起来你

将“Unsigned int”转换为短整数和反整数。这可能吗?如果是这样,怎么做


Grrrr。我忘了带符号的数字是如何实现的。这个问题毫无意义。无论如何,谢谢你。我本来打算自己投反对票,你可以改为投反对票。

如果你的整数没有任何特定的特征,比如是某个东西的倍数,我认为你不能

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


从Short.MAX\u VALUE可以看出,最大值是2^15-1,因为Short占用16位。。所以你实际上失去了精度,你不能表达像2这样的整数。

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

public class SpecialInt { int i = 0; public void set(int i) { if ( i < 0 ) throw new IllegalArgumentException("cannot be negative"); this.i = i; } public void add(int j) { int t = i+j; if( t < i ) throw new IllegalArgumentException("overflow!"); i = t; } public void sub(int j) { int t = i-j; if( t > i ) throw new IllegalArgumentException("overflow!"); i = t; } public void mult(int j) { int mult_max = Integer.MAX_VALUE / i; if( j > mult_max ) throw new IllegalArgumentException("overflow!"); i *= j; } } 公共类特价商品{ int i=0; 公共无效集(int i){ 如果(i<0)抛出新的IllegalArgumentException(“不能为负”); 这个。i=i; } 公共无效添加(int j){ int t=i+j; 如果(ti)抛出新的IllegalArgumentException(“溢出!”); i=t; } 公共空间多功能(int j){ int mult_max=Integer.max_值/i; 如果(j>mult_max)抛出新的IllegalArgumentException(“溢出!”); i*=j; } }
我不确定我是否完全理解这个问题,但如果你确定你的整数适合短整数(你的数字介于0和2^16之间),你可以始终将整数转换为短整数:

int i = 65536;
short s = (short) i;
要返回无符号值,请执行以下操作: int i2=s&0xFFFF; 系统输出println(i2)


s&0xFFFF
将s向上转换为int,位掩码将负数“转换”为其无符号值(排序)。请记住,短变量-1中的FFFF不是65536。

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

我愿意冒int的风险,在这种情况下,上限会稍微减小。“无符号int”在java中没有任何意义。您可以谈论一个只有“正值”的整数,但仍然在int范围内(31位数字),或者一个完整的32位无符号int,在java上的范围为0->(MAX_int*2)。这两者都不适合java短片。java short仍然是一个有符号的数字,最大值为2^15-1个Hanks,这将在较小的范围内起作用,但似乎是最好的选择。