有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要一个更大的整数基元类型

我有一个java程序,可以将大量的数字相乘。输出是long,但太小,输出为0。我不认为有更大的原始类型

我可以使用BigInteger类,但是我必须使用它的multiply()divide()方法,而不是常规的*/,这将非常不方便

下面是一行代码:

System.out.printf("c) In how many of the arrangements in part (a) are all the vowels adjacent?%n    " + "(7! / (2!2!))(6! / 3!2!) = " + (new Factorial(7).r / new Power(new Factorial(2).r,2).r) * (new Factorial(6).r / (new Factorial(6).r * new Factorial(2).r)) + "%n");

它正在使用我的FactorialPower类,而且太大了

是否有一个更长的数字类仍然可以使用*/?还是有其他更容易使用的数字类

谢谢


共 (1) 个答案

  1. # 1 楼答案

    基本类型(byte、short、int、long)是处理器体系结构定义的其他语言(比如C、C++)中的经典类型。因此,根据您的CPU类型,long可能是16位、32位或64位

    现在,Java改变了这一点,并将这种类型固定到一定长度,而不考虑处理器架构See more info here

    如果你需要处理更大的数字,你只剩下BigIntegerBigDecimal和类似的数字。请注意:这些类型不使用CPU指令,而是“手动”进行数学运算,这意味着它们的速度相当慢(想想1000倍)

    另一方面,您所说的将*/与这些类型一起使用被称为operator overloading。一些编程语言支持它,但在Java中这是一个很大的禁忌。有一些预编译器(参见JFront),但最后我听说它不适用于BigInteger

    您可以用GroovyScala编写程序,这两种语言都在JVM上运行(Groovy的语法与Java非常相似,主要是将.Java重命名为.Groovy works),并且都支持BigInteger的运算符重载