我想将4294967295
分配给变量(2^32-1
)
很明显,我无法使用Integer
执行此操作,并且可以使用Long
执行此操作。
但是,我注意到Java 8提供了无符号整数(至少有一些方法)。
有人知道方法Integer.parseUnsignedInt()
的作用吗?
当我输入"4294967295"
并打印变量时,输出为-1
(-2
为4294967294
,-3
为4294967293
,依此类推......)
我是否仍然可以在变量中使用4294967295
?
我在这里错过了什么吗?
a=Integer.parseUnsignedInt("4294967295");
System.out.println(a);
这会将输出设为-1
,但我期望4294967295
。
答案 0 :(得分:19)
您可以通过调用toUnsignedString()
:
int uint = Integer.parseUnsignedInt("4294967295");
System.out.println(Integer.toUnsignedString(uint));
您还可以调用其他一些将int解释为unsigned的方法。
例如:
long l = Integer.toUnsignedLong(uint);
System.out.println(l); // will print 4294967295
int x = Integer.parseUnsignedInt("4294967295");
int y = 5;
int cmp1 = Integer.compareUnsigned(x,y); // interprets x as 4294967295 (x>y)
int cmp2 = Integer.compare(x,y); // interprets x as -1 (x<y)
答案 1 :(得分:3)
据我了解https://blogs.oracle.com/darcy/entry/unsigned_api,通过引入新类型,未签名的支持不完成。这些值仍然存储在(signed)int变量中,但它们提供的方法将值解释为无符号:
为了避免处理盒装值的开销并允许重用内置算术运算符,unsigned API支持不会引入新的类型,如UnsignedInt和实例方法来执行加法,减法等。但是,缺乏单独的Java级无符号类型确实意味着程序员可能会意外地不正确地混合有符号和无符号值。
您使用了&#34; unsigned&#34;解析版本,但您不会显示您使用哪种方法&#34;打印变量&#34;。可能你选择了(默认)签名的。
答案 2 :(得分:0)
我有可能在变量中拥有4294967295吗?
是。使用long
。 (对我而言,这听起来像是在过度思考它。)