【发布时间】:2019-04-16 22:10:44
【问题描述】:
我有 long 值 bits 声明如下:
long bits = len*8L; (304)
System.out.println(bits); 输出为 304
如果我像这样使用长名称位,我将分别得到 0 和 0。
System.out.println(bits>>(4*8));
System.out.println(0xFF&(bits>>(4*8)));
如果我使用实际数字,像这样,我分别得到 304 和 48
System.out.println(304>>(4*8));
System.out.println(0xFF&(304>>(4*8)));
我正在尝试将此 Java 转换为 JavaScript,但 JavaScript 在所有情况下都给我 304 和 48。我需要它来匹配 Java 并给出 0 和 0 的值。
编辑
跟进,只是为了清楚一点,我需要相当于等于 0 的 JavaScript,模仿 Java 目前是如何做到的(上面两个等于 0 的例子在我们正在开发的东西中不会改变)。
所以 console.log(0xFF&(bits>>(4*8))) 应该等于 0,它目前等于 48
【问题讨论】:
-
在 Java 中,
304是一个int,因此对于要移位的位数有一个隐含的((4*8)%32)。bits是一个long,所以有一个隐含的((4*8)%64)。 JavaScript,我不知道... -
并跟进@KenY-N Javascript 将所有转换作为 32 位数字进行。所以忽略了 32 位的移位。
标签: javascript java hex long-integer calculation