如何将js中的var转换为java?
现在我正在尝试将一些js代码转换为java,有一个问题: 在js中 46022*65535=3016051770 及 (46022*65535)| 7867=-1278910789 在爪哇 46022*65535=-1278915526这是溢出 46022L*65535L=3016051770L这与js的结果相同 (46022*65535)| 7867=-1278910789这个和下面的就是问题所在 (46022L*65535L)| 7867L=3016056507L 那么,为什么如何将js中的var转换为java?,java,javascript,numbers,Java,Javascript,Numbers,现在我正在尝试将一些js代码转换为java,有一个问题: 在js中 46022*65535=3016051770 及 (46022*65535)| 7867=-1278910789 在爪哇 46022*65535=-1278915526这是溢出 46022L*65535L=3016051770L这与js的结果相同 (46022*65535)| 7867=-1278910789这个和下面的就是问题所在 (46022L*65535L)| 7867L=3016056507L 那么,为什么|操作符会将两
|
操作符会将两个正数设为负数?
java和js在处理int和long时有什么不同
那么,在这种情况下,如何编写与js兼容的java代码呢
注意:我知道int和long的范围,我的问题是
更多问题:
据
&
也是32位操作,然后:
在js中
2996101485&65535=57709
在爪哇
2996101485是溢出到int的,所以我使用double来存储它,并在需要执行和时将其转换为int
双a=2996101485l
双b=65535
int c=(int)a和(int)b;现在c=65535
但如果我使用long来施展:
长c=(长)a和(长)b;现在c=57709
所以,只要简单地将double转换为int,就会产生问题。我想知道为什么
我遇到了一个问题,2996101485可以在js中以32位的形式出现,在java中应该很长。所以我编写函数来转换这些操作,例如,&
应该使用这个java函数来运行,并在js中给出相同的结果:
private double doOR(double x, double y) {
if (x > Integer.MAX_VALUE && x <= 1l << 32) {
if (y > Integer.MAX_VALUE && y <= 1l << 32) {
return (long) x | (long) y;
} else {
return (long) x | (int) y;
}
} else {
return (int) x | (int) y;
}
}
私人双门(双x,双y){
如果(x>Integer.MAX_值&&x,则应改用long
System.out.println(46022L*65535L); // = 3016051770
Java有整数和长整数
System.out.println(Integer.MAX_VALUE); // = 2147483647
System.out.println(Long.MAX_VALUE); // = 9,223,372,036,854,775,807
至于语言差异,我只能将其归因于两种语言之间的精度不同。你会看到JS中最大的数字是9007199254740992。这是一个猜测,可能是另一个原因。问题是,虽然JavaScript中的数字(它们似乎基于浮点双精度),但
按位运算符将其操作数视为32位(0和1)的序列,而不是十进制、十六进制或八进制数
这意味着在使用算术时,long
将为您提供类似JavaScript的算术(使用像您这样的数字),因为Javaint
s会溢出;但是当使用逐位操作时,int
会得到类似JavaScript的结果,因为这两个平台都是在32位数字上运行的。我尝试过这个,但是使用
时结果与js不同。我正在提名重新打开。标记为du的那个plicate可以解释|
,但这不是同一个问题。因此,当我使用或操作时,js让数字为32位精度?基本上,是的。至少,从我读到的内容来看是什么!我不知道JavaScript,也不知道Java。如果我在执行或操作之前将long
转换为int
,我会看到您的更新tes,它会像js一样运行吗?这应该可以,是的——但请确保将所有操作数强制转换为int
,否则只有一个操作数会导致它们全部升级为long
!顺便说一句,这正是您在第三个Java代码段中的内容,(46022*65535)|7867=-1278910789
——在该代码段中,所有操作数都是int
。