按位不 - Flash AS3?

Dav*_*noh 0 flash actionscript-3

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

我需要一个人的补充 - 应该是FE0B.但我似乎无法得到我需要的东西.

我做:

var n:int = 0xF4;
n = ~n;
trace(n.toString(16));
Run Code Online (Sandbox Code Playgroud)

-F5不是0B.

谁知道我能做什么?

Cam*_*ron 6

一个补码适用于所有位.在Flash中,int是32位(或8个十六进制数字).所以,~0x01F40xFFFFFE0B(因为0x01F40x000001F4).如果你只需要最后2个字节的价值,只需在以下后面做一个掩码:~n & 0xFFFF.

你得到-F5输出的原因int是签名类型 - 所以无论何时设置最高位(就像你的例子一样),Flash都认为它是负2的补码并给你输出.这些位是正确的,但格式化的表示是意料之外的,因为你没有问你认为你是什么.将类型更改为uint,输出应该变为(预期的)FFFFFE0B.