我想将两个相乘,unsigned integers但我希望结果存在于一个unsigned long long变量中
unsigned long long M;
unsigned int X;
unsigned int Y;
X = 999999;
Y = 9990;
M = X * Y;
Run Code Online (Sandbox Code Playgroud)
M应该9989990010但由于某种原因它一直存在1400055418
我已经困扰了一个星期了,我想我已经到了想哭的地步!
我提出了一个解决阶乘的应用程序,当我输入一个长度超过20位数的long变量时,它会返回一个负数.我想知道为什么longC#中的变量在超过限制时会返回负值?它应该是这样的吗?
我正在将一些C++代码移植到Java代码中.
java中没有无符号数据类型,可以容纳64位.
我有一个哈希码,它存储在Java的long数据类型中(当然是签名的).
long vp = hashcode / 38; // hashcode is of type 'long'
Run Code Online (Sandbox Code Playgroud)
由于此处的38大于2,因此结果数可以安全地用于java中的任何其他算术.
问题是如果'hashcode'中的signed bit设置为1.我不想在变量vp中得到负值.我想要一个正值,好像数据类型是无符号的.
PS:由于性能问题,我不想为此目的使用Biginteger.
我正在尝试使用Java Scanner从文本文件(File.txt)中读取20位长.
java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
longNumber = (long) filereader.nextLong();
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
Exception in thread "main" java.util.InputMismatchException: For input string: "37107287533902102798"
at java.util.Scanner.nextLong(Scanner.java:2271)
at java.util.Scanner.nextLong(Scanner.java:2225)
at scanner.Scanner.main(Scanner.java:14)
Run Code Online (Sandbox Code Playgroud)
当我将数字的长度减少到19位或更少时,它运行得很好.有人可以解释我如何使用20+数字吗?
在我的机器中,我得到以下结果:
sizeof(long) = 8
sizeof(long int) = 8
Run Code Online (Sandbox Code Playgroud)
在哪里使用long int,为什么不使用int?
java如何计算这个?
int number = (int) Long.parseLong("F9DFF755", 16);
Long.parseLong("F9DFF755", 16); == 4192204629 (too big to be stored by an int)
Casted to int : -102762667
Run Code Online (Sandbox Code Playgroud)
java如何强制插入int?
String a = "576055795";
long b = 10*Integer.parseInt(a);
long c = 10*Long.parseLong(a);
System.out.println(b); //Prints 1465590654
System.out.println(c); // Prints 5760557950
Run Code Online (Sandbox Code Playgroud)
他们为什么不同?
我正在玩一些c ++代码,发现如果我用4294967295(它的最大允许值)开始一个unsigned long并添加让我们说6我必须得到5,它确实!但是以下添加操作,而mod 255没有给出正确的答案.为什么会这样,以及如何避免?
Plataforms经过测试:
Windows 7,Visual Studio c ++:工作正常;
CentOS版本6.6(最终版),g ++:给出错误的答案;
请参阅下面的代码注释:
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned long s1=4294967295;
unsigned long vp=245;
unsigned long a;
unsigned long b;
unsigned long result;
/* s1 is 4294967295 + 6 wich is 5 */
s1+=6;
a=s1;
b=255*vp*s1;
result = (a + b) % 255;
printf("s1=%u , a=%u , b=%u , (a+b)=%u , (a+b)%255= %u\n", s1, a, b, a + b, result);
/* s1 is a static value 5 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的电源功能,我想用两个大数字做这样的事情:
(def y 19859145917581983573N)
(def p 27829350753993985481N)
(defn power
[x n]
(reduce *' (repeat n x))
)
(power y p)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
IllegalArgumentException Value out of range for long: 27829350753993985481 clojure.lang.RT.longCast (RT.java:1210)
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?