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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top