0

我有一个十六进制数:0x01F4

我需要一个人的补码——应该是FE0B。但我似乎无法得到我需要的东西。

我愿意:

var n:int = 0xF4;
n = ~n;
trace(n.toString(16));

并得到-F5而不是0B.

有谁知道我能做什么?

4

1 回答 1

6

一个补码适用于所有位。在 Flash 中,一个 int 是 32 位(或 8 个十六进制数字)。也是(因为~0x01F4是)。如果您只想要最后 2 个字节的值,只需在: 之后做一个掩码。0xFFFFFE0B0x01F40x000001F4~n & 0xFFFF

你得到-F5输出的原因是它int是一个有符号的类型——所以只要设置了最高位(就像你的例子一样),Flash 认为它是一个负 2 的补码并给你那个输出。这些位是正确的,但格式化的表示是出乎意料的,因为你不是在问你认为你是什么。将类型更改为uint,输出应变为 (预期的) FFFFFE0B

于 2013-09-30T21:14:21.727 回答