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

发布于 2022-09-12 02:55:57 字数 882 浏览 29 评论 0

线上分析某个网站的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对应的位操作存在不同的执行结果。求帮忙详细解析。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心如狂蝶 2022-09-19 02:55:58
        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 来存储。

远昼 2022-09-19 02:55:58

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文