0
我有一個十六進制數字:0x01F4
按位不是 - Flash AS3?
我需要一個補 - 這應該是FE0B
。但我似乎無法得到我需要的東西。
我做的:
var n:int = 0xF4;
n = ~n;
trace(n.toString(16));
並獲得-F5
而不是0B
。
任何人都知道我能做什麼?
我有一個十六進制數字:0x01F4
按位不是 - Flash AS3?
我需要一個補 - 這應該是FE0B
。但我似乎無法得到我需要的東西。
我做的:
var n:int = 0xF4;
n = ~n;
trace(n.toString(16));
並獲得-F5
而不是0B
。
任何人都知道我能做什麼?
補碼可用於所有位。在Flash中,int是32位(或8位十六進制數字)。所以~0x01F4
是0xFFFFFE0B
(因爲0x01F4
是0x000001F4
)。如果您只需要最後2個字節,只需在~n & 0xFFFF
之後執行一次掩碼即可。
原因你-F5
作爲輸出是int
是一個符號類型 - 所以每當最高位(因爲它是你的榜樣),閃存認爲它是一個負2的補數,併爲您提供了輸出。這些位是正確的,但格式化的表示是意想不到的,因爲你並不是在問自己以爲自己是什麼。將類型更改爲uint
,並且輸出應該變爲(預期的)FFFFFE0B
。
這是數學。我不知道AS3,但我可以說:int是一個有符號整數,你的**正數** F4是逐位求反(不是按位),結果再次解釋爲一個整數有符號數,它的-F5爲正確的十六進制符號表示。在比較中,從比特的角度來看,這是正確的。如果你想看到它,你應該把int轉換爲無符號整數,如果它在AS3中有意義的話 - 不要忘記:做1的補碼「寬度」是很重要的:AS3中有多少位使得int成爲int? (例如32,而不是16) – ShinTakezou
啊,就是這樣!謝謝!我需要做的只是:var n:uint,我得到了我之後的結果。 –