标签: long-integer

Java:0 <= x <n范围内的随机长数

Random类有一个在给定范围内生成随机int的方法.例如:

Random r = new Random(); 
int x = r.nextInt(100);
Run Code Online (Sandbox Code Playgroud)

这将产生一个大于等于0且小于100的int数.我想用长数做同样的事.

long y = magicRandomLongGenerator(100);
Run Code Online (Sandbox Code Playgroud)

Random类只有nextLong(),但它不允许设置范围.

java random range long-integer

129
推荐指数
5
解决办法
13万
查看次数

在Java中将Long转换为Date将返回1970年

我有从Web服务下载的长值列表(例如:1220227200,1220832000,1221436800 ...).我必须把它转换成日期.不幸的是这种方式,例如:

Date d = new Date(1220227200);
Run Code Online (Sandbox Code Playgroud)

返回1970年1月1日.任何人都知道另一种方法正确转换它?

java date long-integer

104
推荐指数
6
解决办法
29万
查看次数

平均3个长整数

我有3个非常大的有符号整数.

long x = long.MaxValue;
long y = long.MaxValue - 1;
long z = long.MaxValue - 2;
Run Code Online (Sandbox Code Playgroud)

我想计算他们的截断平均值.预期的平均值是long.MaxValue - 1,即9223372036854775806.

无法将其计算为:

long avg = (x + y + z) / 3; // 3074457345618258600
Run Code Online (Sandbox Code Playgroud)

注意:我阅读了有关2个数字的平均值的所有问题,但我不知道该技术如何应用​​于平均3个数字.

使用它会很容易BigInteger,但我们假设我不能使用它.

BigInteger bx = new BigInteger(x);
BigInteger by = new BigInteger(y);
BigInteger bz = new BigInteger(z);
BigInteger bavg = (bx + by + bz) / 3; // 9223372036854775806
Run Code Online (Sandbox Code Playgroud)

如果我转换为double,那么,当然,我失去了精度:

double dx = x;
double dy = y;
double …
Run Code Online (Sandbox Code Playgroud)

.net c# long-integer

102
推荐指数
7
解决办法
8122
查看次数

如何检查Java中的两个数字相乘是否会导致溢出?

我想处理两个数字相乘导致溢出的特殊情况.代码看起来像这样:

int a = 20;
long b = 30;

// if a or b are big enough, this result will silently overflow
long c = a * b;
Run Code Online (Sandbox Code Playgroud)

这是一个简化版本.在真正的程序中,ab在运行时在其他地方采购.我想要实现的是这样的:

long c;
if (a * b will overflow) {
    c = Long.MAX_VALUE;
} else {
    c = a * b;
}
Run Code Online (Sandbox Code Playgroud)

您如何建议我最好编码?

更新:a而且b总是在我的场景下非负.

java math overflow long-integer

94
推荐指数
6
解决办法
3万
查看次数

Java的L号(长)规范

看来,当你在Java中输入一个数字时,编译器会自动将它读作一个整数,这就是为什么当你输入(long)6000000000(不在整数范围内)时,它会抱怨它6000000000不是一个整数.要纠正这个问题,我必须指明6000000000L.我刚刚了解了这个规范.

还有其他数字规格,如short,byte,float,double?这似乎是好事,因为(我假设),如果你可以指定你输入的数字是短的,那么java就不必抛出它 - 这是一个假设,如果我错了,请纠正我.我通常会自己搜索这个问题,但我不知道甚至会调用这种数字规范.

java specifications numbers short long-integer

91
推荐指数
4
解决办法
12万
查看次数

为什么在x64 Java中长度比int慢?

我在Surface Pro 2平板电脑上运行带有Java 7更新45 x64(没有安装32位Java)的Windows 8.1 x64.

当i的类型为long时,下面的代码需要1688ms,当i是int时,代码需要109ms.为什么在具有64位JVM的64位平台上,long(64位类型)比int慢一个数量级?

我唯一的猜测是,CPU需要更长的时间来添加64位整数而不是32位整数,但这似乎不太可能.我怀疑Haswell不使用纹波进位加法器.

我在Eclipse Kepler SR1中运行它,顺便说一句.

public class Main {

    private static long i = Integer.MAX_VALUE;

    public static void main(String[] args) {    
        System.out.println("Starting the loop");
        long startTime = System.currentTimeMillis();
        while(!decrementAndCheck()){
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Finished the loop in " + (endTime - startTime) + "ms");
    }

    private static boolean decrementAndCheck() {
        return --i < 0;
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑:以下是VS 2013(下面),同一系统编译的等效C++代码的结果. 长:72265ms int:74656ms 这些结果是在调试32位模式下.

在64位发布模式下: 长:875ms long long:906ms int:1047ms

这表明我观察到的结果是JVM优化怪异而不是CPU限制.

#include "stdafx.h"
#include "iostream"
#include …
Run Code Online (Sandbox Code Playgroud)

java performance 32bit-64bit long-integer

90
推荐指数
3
解决办法
1万
查看次数

如何在c#中将数据从字符串转换为long

我如何在C#中将数据从字符串转换为long?

我有数据

String strValue[i] ="1100.25";
Run Code Online (Sandbox Code Playgroud)

现在我想要它

long l1;
Run Code Online (Sandbox Code Playgroud)

c# string type-conversion long-integer

87
推荐指数
6
解决办法
20万
查看次数

Java中的整数除法

这是一个基本问题,但我找不到答案.我已经研究了浮点运算和其他一些主题,但似乎没有任何东西可以解决这个问题.我确定我的术语错了.

基本上,我想要两个数量 - 完成和总数 - 并将它们分成一个百分比(已经完成了多少).数量是longs.这是设置:

long completed = 25000;
long total = 50000;

System.out.println(completed/total);  // Prints 0
Run Code Online (Sandbox Code Playgroud)

我已经尝试将结果重新分配给双 - 它打印0.0.我哪里错了?

顺便提一下,下一步是将这个结果乘以100,一旦这个小障碍被推翻,我认为应该很容易.

顺便说一句,这里没有作业,只是普通的老字号(今天可能编码过多).

java math floating-point println long-integer

87
推荐指数
3
解决办法
17万
查看次数

int类型的文字xyz超出范围

我目前正在使用Java中的数据类型,如果我已正确理解该类型long接受范围之间的值:-9,223,372,036,854到+9,223,372,036,854,775,807.现在你可以在下面看到我创建了一个名为Long的变量testLong,虽然当我插入9223372036854775807作为值时,我得到一个错误说明:

"int类型的文字9223372036854775807超出了范围."

我不知道为什么它将long数据类型称为int

有人有主意吗?

代码如下:

char testChar = 01;
byte testByte = -128;
int testInt = -2147483648;
short testShort = -32768;
long testLong = 9223372036854775807;
float testFoat;
double testDouble = 4.940656458412;
boolean testBool = true;
Run Code Online (Sandbox Code Playgroud)

java int long-integer

86
推荐指数
3
解决办法
8万
查看次数

很长一段时间用C/C++

我在GNU的C++编译器上尝试这个代码,我无法理解它的行为:

#include <stdio.h>;

int main()
{
    int  num1 = 1000000000;
    long num2 = 1000000000;
    long long num3;
    //num3 = 100000000000;
    long long num4 = ~0;

    printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
    printf("%d %ld %lld %llu", num1, num2, num3, num4);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我取消注释注释行时,代码不会编译并给出错误:

错误:对于long类型,整数常量太大

但是,如果代码按原样编译并执行,则会产生远大于10000000000的值.

为什么?

c++ types long-integer

82
推荐指数
3
解决办法
24万
查看次数