如何在Java或C++中表示128位整数?

15

在Java或C++中是否可以拥有一个128位的整数?


2
你需要更具体地说明你的需求。仅仅表示应该是显然可以的:long a,b将一个128位数表示为一对64位数。 - unwind
1
@unwind:在某些编译器上,long可能是32位。__int64long long将至少为64位,但它们是非标准扩展。 - Brian
可能是 C++ 中的大整数 的重复问题。 - MSalters
1
@Brian:没错,当我回答的时候,我很确定这个问题只涉及到Java。对于C++,使用四个uint32_t部分。 - unwind
1
在g++中,您可以使用这些内置类型(至少在64位平台上):__int128_t__uint_128_t - rafak
6个回答

17

当然,你可以表示它们。

至少你可以使用一个具有16个元素的字节数组。

然而,问题是你只是想要表示这个值还是实际上要做一些计算。

在Java中,你可以使用BigInteger 来表示(有效地)任意大小的整数值,并且也可以进行计算。


C/C++已经有__int 128 https://gnu.huihoo.org/gcc/gcc-4.7.4/gcc/_005f_005fint128.html。您可以使用BigInteger来处理字节,其效果相同。有一些处理器支持128位的值,并且有一些广泛使用这样的数字的用例,例如GUID或IPv6。 - user9999
这里有一个回答,阐明了现代商品化CPU的能力:https://dev59.com/8Jjga4cB1Zd3GeqPGjCu#37925245。还有Rust的介绍:https://dev59.com/hlMH5IYBdhLWcg3w_Wd_。 - user9999
C++并没有__int128,但除了MSVC之外,所有主要的编译器都将其作为自定义扩展添加了进去。其中最好的选择是boost::multiprecision::int128_t - undefined

14

在Java中,你可以使用BigInteger类来存储任意大的整数。在C++中,你可以使用像GMP这样的库来获得同样的功能。


2
你可以这样做。不过,至少对于C++,你很可能需要使用一个库来实现。
我喜欢PolarSSL库或GNU MP Bignum库。

1

BigInteger类是为大于Long.MAX_VALUE的整数值而设计的。


0

java.math.BigInteger

如果需要处理大于64位(long类型的大小)的整数,请使用java.math.BigInteger。这个类代表了无限制的整数,并提供了许多用于进行算术运算的方法。

http://leepoint.net/notes-java/data/numbers/10biginteger.html

如果您需要使用小数值,请使用BigDecimal

0
当然,您可以使用java.math包中的BigInteger类。该类提供了模算术、GCD计算、素性测试、素数生成、位操作等操作。
这个类在JDK1.1中就已经被添加了。
但是我不知道C++库中是否内置了这样的可用性。可能会有来自第三方的可扩展API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接