2017-06-17 2 views
2

den Wert Gegeben: 0x9e9090ab (10011110100100001001000010101011)Fallenlassen der letzte Bit

Ich möchte so das 32. Bit ignoriert den Wert analysieren, dass ich am Ende mit: 0x1e9090ab (00011110100100001001000010101011)

bei Meine Versuche, dies zu tun über eine Bitmaske (0x9e9090ab & ~ 0x10000000) scheinen nicht zu funktionieren und führen zu einer negativen Zahl mit Vorzeichen.

Nicht sicher, was ich hier falsch mache, so würde jede Hilfe geschätzt werden.

+1

Ich glaube, ich könnte genauso gut (0x9e9090ab << 1) > > 1, aber hoppelvoll hat jemand eine bessere Lösung – SS44

+2

Es muss 0x80000000 sein und nicht 0x10000000 –

Antwort

1

Sie müssen die Bitmaske ~0x80000000 anstelle von ~0x10000000 verwenden, da sich 0x10000000 auf das 29. Bit bezieht. Beispiel:

var result = 0x9e9090ab & ~0x80000000; 
0

Für mich ist es einfacher, über diese Art und Weise zu denken:

0x9e9090ab & 0x7FFFFFFF

Sie Knoten mit vergleichen kann:

> (0xFFFFFFFF).toString(2) 
'11111111111111111111111111111111' 
> (0x7FFFFFFF).toString(2) 
'1111111111111111111111111111111' 
Verwandte Themen