Javascript 位运算与Java位运算结果不一样,javascript整型位操作在java如果操作?

线上分析某个网站的Javascript源码,想转换成对应的Java源码,但发现输出的结果不一样。
javascript源码

var e=271733878

var t=3705142957

var n=4023233417

var r=2562383102

var o=795631988

var a=12

var i=-389564586

var s = e + ((t & n | ~t & r)) + o + i

console.log(s)

console.log((s << a | s >>> 32 - a) + t)

java源码

long e=271733878L,

t=3705142957L,

n=4023233417L,

r=2562383102L,

o=795631988L,

a=12,

i=-389564586L,

s = e + (t & n | ~t & r) + o + i;

//System.out.println((int)s);

System.out.println(s);

//System.out.println(((int)( s << a | s >>> (32L - a)) + t));

System.out.println(( s << a | s >>> (32 - a)) + t);

如果把注释开启,可以返回正确的结果值。
输出结果:
QQ图片20200502161722.png

javascript的位操作为什么在java对应的位操作存在不同的执行结果。求帮忙详细解析。

回答:

        long e=271733878L,

t=3705142957L,

n=4023233417L,

r=2562383102L,

o=795631988L,

a=12,

i=-389564586L,

s = e + (t & n | ~t & r) + o + i;

System.out.println(s);

System.out.println(Integer.MAX_VALUE);

输出

4115929115

2147483647

值已超出32位整型最大值,首位是1,按整型规则会输出负值,所以需要用64位的 long 来存储。

回答:

解决了。javascript默认4个字节,32位存储。java long整形为八个字节。参与运算的数字全部强转为int类型(4个字节,32位),就能与javascript运算的保持一致

以上是 Javascript 位运算与Java位运算结果不一样,javascript整型位操作在java如果操作? 的全部内容, 来源链接: utcz.com/p/172626.html

回到顶部