2013-09-30 62 views
0

我有一個十六進制數字:0x01F4按位不是 - Flash AS3?

我需要一個補 - 這應該是FE0B。但我似乎無法得到我需要的東西。

我做的:

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

並獲得-F5而不是0B

任何人都知道我能做什麼?

+1

這是數學。我不知道AS3,但我可以說:int是一個有符號整數,你的**正數** F4是逐位求反(不是按位),結果再次解釋爲一個整數有符號數,它的-F5爲正確的十六進制符號表示。在比較中,從比特的角度來看,這是正確的。如果你想看到它,你應該把int轉換爲無符號整數,如果它在AS3中有意義的話 - 不要忘記:做1的補碼「寬度」是很重要的:AS3中有多少位使得int成爲int? (例如32,而不是16) – ShinTakezou

+1

啊,就是這樣!謝謝!我需要做的只是:var n:uint,我得到了我之後的結果。 –

回答

6

補碼可用於所有位。在Flash中,int是32位(或8位十六進制數字)。所以~0x01F40xFFFFFE0B(因爲0x01F40x000001F4)。如果您只需要最後2個字節,只需在~n & 0xFFFF之後執行一次掩碼即可。

原因你-F5作爲輸出是int是一個符號類型 - 所以每當最高位(因爲它是你的榜樣),閃存認爲它是一個負2的補數,併爲您提供了輸出。這些位是正確的,但格式化的表示是意想不到的,因爲你並不是在問自己以爲自己是什麼。將類型更改爲uint,並且輸出應該變爲(預期的)FFFFFE0B