我有一个十六进制数:0x01F4
我需要一个人的补码——应该是FE0B
。但我似乎无法得到我需要的东西。
我愿意:
var n:int = 0xF4;
n = ~n;
trace(n.toString(16));
并得到-F5
而不是0B
.
有谁知道我能做什么?
我有一个十六进制数:0x01F4
我需要一个人的补码——应该是FE0B
。但我似乎无法得到我需要的东西。
我愿意:
var n:int = 0xF4;
n = ~n;
trace(n.toString(16));
并得到-F5
而不是0B
.
有谁知道我能做什么?
一个补码适用于所有位。在 Flash 中,一个 int 是 32 位(或 8 个十六进制数字)。也是(因为~0x01F4
是)。如果您只想要最后 2 个字节的值,只需在: 之后做一个掩码。0xFFFFFE0B
0x01F4
0x000001F4
~n & 0xFFFF
你得到-F5
输出的原因是它int
是一个有符号的类型——所以只要设置了最高位(就像你的例子一样),Flash 认为它是一个负 2 的补码并给你那个输出。这些位是正确的,但格式化的表示是出乎意料的,因为你不是在问你认为你是什么。将类型更改为uint
,输出应变为 (预期的) FFFFFE0B
。