Attivare bit più a sinistra di un corto
-
02-10-2019 - |
Domanda
domanda originale ha cambiato.
Voglio bit a bit Spegnere il bit più a sinistra di un valore breve (e H8000) e lasciare gli altri bit come sono.
Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)
Non c'è alcun modo più breve con operatori bit per bit?
Quando faccio
Dim a = Short.MaxValue Or &H8000
ottengo un errore di compilazione, perchè va in su, invece di negarla.
Soluzione
Questo perché .NET utilizza complemento a due, non firmato grandezza. Di negare, bisogna capovolgere tutti i bit e quindi aggiungere uno.
è sufficiente utilizzare il meno unario. Si prega di ... Abbastanza per favore.
EDIT: Se per qualche strana ragione si doveva fare questo con le operazioni bit per bit, si dovrebbe fare questo:
Dim somewhatCorrect = (Short.MaxValue xor Short.MinValue) + 1;
che naturalmente non è ancora bit a bit, perché la negazione complemento a due non può essere fatto in modo efficiente con operatori bit a bit.
EDIT2: Ed ecco un meno unario:
Dim correct = -Short.MaxValue;
Edit3: In risposta alla domanda modificato :
Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue
Altri suggerimenti
complemento a due
Dim testV As Short = &HD555S 'a test value
Dim twosC As Short 'twos comp
twosC = (testV Xor &HFFFFS) + 1S 'reverse the bits, add 1
Cambia bit più significativo
twosC = twosC Xor &H8000S