为什么 AS3 右移位与 Java 中的相同内容不同?
Why is AS3 right bit shift different than the same thing in Java?
没有一些代码很难解释..所以
var junk:uint = uint(4294280300);
trace(junk.toString(2)); // returns 11111111111101011000010001101100
junk = junk >> 8;
trace(junk.toString(2)); // returns 11111111111111111111010110000100
这是Java部分
long junk = 4294280300L;
System.out.println(Long.toBinaryString(junk)); // returns 11111111111101011000010001101100
junk = junk >> 8;
System.out.println(Long.toBinaryString(junk)); // returns 111111111111010110000100
我做错了什么?如何在 Java 中获得相同的结果?我试过使用 >>>
而不是 >>
但它似乎不起作用。
我完全不懂 ActionScript,但由于数字内部表示的差异,可以肯定。
ActionScript 的 uint 类型似乎确实是一个 32 位编码的无符号整数。
此外,在执行右移操作之前,该数字似乎已转换为有符号整数。这种违反直觉的行为解释了结果。
你在Java中没有这个问题,因为 long 是一个编码为 64 位的整数,而值 4294280300 完全适合 64 位。
如果您使用 int 而不是 long,您会观察到与 ActionScript 中相同的结果。
让我们看看 JavaScript 做了什么以更好地理解 ActionScript 中似乎发生的事情:JavaScript 将所有数字存储为双浮点数,并且您肯定不会丢失整数的精度可以放入 53 位。
尝试使用相同的值,如果您使用 >>
,您会看到与 ActionScript 中相同的结果,但如果您使用 >>>
.
,则与 Java 相同
ON Java脚本方面,似乎 >>
a.k.a 算术移位首先将值转换为 32 位有符号整数,而 >>>
a.k.a逻辑移位。
这很奇怪,而且 ActionScript 做类似的事情也不足为奇。
有趣的是,python 没有 >>>
运算符,总是进行算术移位,似乎甚至可以在 64 位以上工作。
鉴于 this question 的受欢迎程度
或 、>>
与 >>>
是存在这两个运算符的语言中常见的混淆来源。
没有一些代码很难解释..所以
var junk:uint = uint(4294280300);
trace(junk.toString(2)); // returns 11111111111101011000010001101100
junk = junk >> 8;
trace(junk.toString(2)); // returns 11111111111111111111010110000100
这是Java部分
long junk = 4294280300L;
System.out.println(Long.toBinaryString(junk)); // returns 11111111111101011000010001101100
junk = junk >> 8;
System.out.println(Long.toBinaryString(junk)); // returns 111111111111010110000100
我做错了什么?如何在 Java 中获得相同的结果?我试过使用 >>>
而不是 >>
但它似乎不起作用。
我完全不懂 ActionScript,但由于数字内部表示的差异,可以肯定。
ActionScript 的 uint 类型似乎确实是一个 32 位编码的无符号整数。 此外,在执行右移操作之前,该数字似乎已转换为有符号整数。这种违反直觉的行为解释了结果。
你在Java中没有这个问题,因为 long 是一个编码为 64 位的整数,而值 4294280300 完全适合 64 位。 如果您使用 int 而不是 long,您会观察到与 ActionScript 中相同的结果。
让我们看看 JavaScript 做了什么以更好地理解 ActionScript 中似乎发生的事情:JavaScript 将所有数字存储为双浮点数,并且您肯定不会丢失整数的精度可以放入 53 位。
尝试使用相同的值,如果您使用 >>
,您会看到与 ActionScript 中相同的结果,但如果您使用 >>>
.
ON Java脚本方面,似乎 >>
a.k.a 算术移位首先将值转换为 32 位有符号整数,而 >>>
a.k.a逻辑移位。
这很奇怪,而且 ActionScript 做类似的事情也不足为奇。
有趣的是,python 没有 >>>
运算符,总是进行算术移位,似乎甚至可以在 64 位以上工作。
鉴于 this question 的受欢迎程度
或 >>
与 >>>
是存在这两个运算符的语言中常见的混淆来源。