A su vez en poco más a la izquierda de un corto
-
02-10-2019 - |
Pregunta
pregunta original ha cambiado.
Quiero modo bit apagar el bit más a la izquierda de un valor corto (y H8000) y dejar los otros bits como son.
Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)
No hay alguna manera más corta con operadores de bits?
Cuando hago
Dim a = Short.MaxValue Or &H8000
me sale un error de compilación, primo que va hacia arriba, en lugar de reducirla a la nada.
Solución
Esto se debe a .NET utiliza complemento a dos, no firmado magnitud. Para negar, hay que voltear todos los bits y luego agregar uno.
sólo tiene que utilizar el menos unario. Por favor ... Bastante por favor.
EDIT: Si por alguna extraña razón que tenía que hacer esto con operaciones bit a bit, que tendría que hacer esto:
Dim somewhatCorrect = (Short.MaxValue xor Short.MinValue) + 1;
que por supuesto todavía no es bit a bit, porque de dos negación del complemento no se puede hacer de manera eficiente con los operadores bit a bit.
Edit2: Y he aquí un menos unario:
Dim correct = -Short.MaxValue;
Edit3: En respuesta a la pregunta editada
Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue
Otros consejos
Complemento a dos
Dim testV As Short = &HD555S 'a test value
Dim twosC As Short 'twos comp
twosC = (testV Xor &HFFFFS) + 1S 'reverse the bits, add 1
Cambiar bit más significativo
twosC = twosC Xor &H8000S