草庐IT

integer-math

全部标签

java - 为什么 Integer.MIN_VALUE 的绝对值等于 Integer.MIN_VALUE

在Java中,当我说Integeri=Math.abs(Integer.MIN_VALUE)时。我得到与答案相同的值,这意味着i包含Integer.MIN_VALUE。我也在C++中验证了相同的内容。为什么会这样? 最佳答案 阅读JoshuaBloch的EffectiveJava。我找到了这个问题的答案,这里是解释:计算机使用二进制运算,Java中的Math.abs或任何语言中的absolute函数的逻辑如下:if(num>=0)returnnum;elsereturn(2'scomplementofthenum);注意:如何求2的

java - 为什么 toBinaryString 不是 Integer 类中的实例方法?

一个简单的设计问题。示例代码:Integerint1=newInteger(20);System.out.println(Integer.toBinaryString(int1));为什么JDK的设计不是下面这样的?那么,toBinaryString函数返回所需的结果?System.out.println(int1.toBinaryString());除了静态函数的广泛可用性之外,这种设计方法的其他原因是什么?他们是否使用任何特定的设计模式?如果是,那么是哪种模式? 最佳答案 这是因为你不能有两个同名的方法,一个是静态的,一个是实例

java - 通过 JNI 更快的 Math.exp()?

我需要经常从java计算Math.exp(),是否有可能让native版本比java的Math运行得更快.exp()??我只尝试了jni+C,但它比普通的java慢。 最佳答案 这已经被要求多次(参见例如here)。这是Math.exp()的近似值,复制自thisblogposting:publicstaticdoubleexp(doubleval){finallongtmp=(long)(1512775*val+(1072693248-60801));returnDouble.longBitsToDouble(tmp它基本上与具有

java - Java 中的 Atomic Integer 和 Normal 不可变 Integer 类有什么区别?

由于Integer类也是不可变类,我们知道不可变类是线程安全的,这就是AtomicInteger的需要。我很困惑。这是否是不可变对象(immutable对象)的读写不必是原子的而原子整数的读写是原子的原因。这意味着原子类也是线程安全的。 最佳答案 当您需要确保只有一个线程可以更新一个int变量时,在多线程环境中使用AtomicInteger。优点是不需要外部同步,因为修改它的值的操作是以线程安全的方式执行的。考虑以下代码:privateintcount;publicintupdateCounter(){return++count;}

java - 随机递归方法中 Math.Random 中的 StackOverflowError

这是我程序的上下文。一个函数有50%的机会什么都不做,50%的机会调用它自己两次。程序完成的概率是多少?这段代码是我写的,显然效果很好。答案可能不是每个人都清楚的是这个程序有100%的机会完成。但是当我运行这个程序时,在Math.Random()中出现了StackOverflowError(多么方便;))。有人可以指出它是从哪里来的,并告诉我我的代码是否有误吗?staticintbestDepth=0;staticintnumberOfPrograms=0;@TestpublicvoidtestProba(){for(inti=0;ibestDepth){bestDepth=depth

java - Java 实体的 id 字段的 Long 与 Integer

Jpa实体生成器将整数类型分配给我的实体的id字段。我的数据库中相应的属性/列是串行类型(是的postgres)。我还将整数类型分配给我的实体id字段。但是我在thispage上看到了LonggetId()的用法。.我还在geomajas示例中看到了这种类型的类型分配。使用Integer时有什么陷阱吗?我的意思是,是的,您必须小心ID不低于0的整数,但同时您还必须确保您的LongId不大于2,147,483,647。那么这里有什么交易?编辑:我混淆了Long和无符号整数,所以我想我在想什么是“java实体的id字段的无符号整数与Integer”现在我对长整数和无符号整数的混淆已经消失了

java - 如何对 Pair<String,Integer> 列表进行排序?

我有一个commonsPair列表,它存储单词及其频率,如下所示privateList>words=newArrayList();我正在尝试对其进行排序,以便在我对其进行迭代以打印单词时,我希望频率最高的单词首先出现。我试着实现Comparable但大多数示例与使用Pairs列表不相似 最佳答案 按数字降序对元素进行排序Collections.sort(words,Comparator.comparing(p->-p.getRight()));这将按降序使用该对的“右”。这使用Java8。理论上,您正在装箱值并使用Integer.c

java - x*x 与 Math.pow(x,2) java 性能对比

我已经做了一些关于x*x或Math.pow(x,2)在Java中是否更快的测试。我原以为简单的x*x会更快一些,但事实证明它的速度差不多。请哪位大侠赐教,这怎么可能? 最佳答案 howisthatpossible,please因为Math.pow是JVM内在的,也就是说,JIT编译器内联调用。此外,当它发现指数是常量2时,它会用x*x替换调用。ProoffromHotSpotsources 关于java-x*x与Math.pow(x,2)java性能对比,我们在StackOverflow

java - 如何使用 lambda 表达式在 Java 的一行中创建值为 0,1,2,...,N 的 int[] 或 Collection<Integer>?

我想做这样的事情:int[]seq=newint[N];for(inti=0;i...在一行中,我想知道是否可以使用lambda表达式。如果它适用于ArrayList,对我来说没问题。 最佳答案 使用IntStream.range():int[]seq=IntStream.range(0,N).toArray();或IntStream.rangeClosed()如果你想包含N:int[]seq=IntStream.rangeClosed(0,N).toArray(); 关于java-如何

java - 当我使用 String 类型参数枚举 vector 时,我得到 ClassCastexception,但使用 Integer 作为类型参数也不异常(exception)

我正在尝试使用vector并编写了一个简单的代码来通过枚举访问它的元素。Vectorv=newVector();v.add("SomeString");v.add(10);Enumeratione=v.elements();while(e.hasMoreElements())System.out.println(e.nextElement());使用原始类型会产生预期的结果(打印元素)。但是,当我使用通用类型的枚举器时,它会变得很棘手。以字符串作为类型参数:Vectorv=newVector();v.add("SomeString");v.add(10);Enumeratione=v.