Javascript 位运算与Java位运算结果不一样,javascript整型位操作在java如果操作?
线上分析某个网站的Javascript源码,想转换成对应的Java源码,但发现输出的结果不一样。
javascript源码
var e=271733878var 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);
如果把注释开启,可以返回正确的结果值。
输出结果:
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);
输出
41159291152147483647
值已超出32位整型最大值,首位是1,按整型规则会输出负值,所以需要用64位的 long 来存储。
回答:
解决了。javascript默认4个字节,32位存储。java long整形为八个字节。参与运算的数字全部强转为int类型(4个字节,32位),就能与javascript运算的保持一致
以上是 Javascript 位运算与Java位运算结果不一样,javascript整型位操作在java如果操作? 的全部内容, 来源链接: utcz.com/p/172626.html