c# .net condition bitwise-operators twos-complement

por qué-3== ~ 2 en C#



.net condition (6)

El complemento de los dos de 3 es:

1 ... 1101

El complemento de (uno) firmado de 2 es:

1 ... 1101

Es facil de hacer:

El complemento a uno: voltear los bits. Dos complemento: complemento de uno + 1.

¿Por qué es esto útil? Las computadoras pueden restar números simplemente volteando y agregando bits.

Incapaz de entender Por qué el resultado es "igual"

código:

if (-3 == ~2) Console.WriteLine("equal"); else Console.WriteLine("not equal");

salida:

equal



Hay una gran diferencia entre estos dos operadores.

"El operador ~ realiza una operación de complemento bit a bit en su operando, que tiene el efecto de invertir cada bit. Los operadores de complemento bit a bit están predefinidos para int, uint, long y ulong".

msdn


Porque la aritmética de bits complementaria de dos lo hace tan

Creado desde la página de wikipedia y ampliado:

Most Significant Bit 6 5 4 3 2 1 0 Value 0 0 0 0 0 0 1 1 3 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 0 -2 1 1 1 1 1 1 0 1 -3 1 1 1 1 1 1 0 0 -4

Entonces obtienes:

0 0 0 0 0 0 1 0 = 2 1 1 1 1 1 1 0 1 = -3

Y como puede ver, todos los bits están volteados, que es lo que hace el operador bit NOT ( ~ ) .


Porque usa el complemento de dos.