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
Esta publicación de explica por qué:
¿Cuál es la tilde (~) en la definición de enum?
es el operador complementario de unario: voltea los bits de su operando. en aritmética de complemento a dos, ~ x == -x-1
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".
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.
Se debe a la representación en dos complementos de los enteros con signo: http://en.wikipedia.org/wiki/Twos_complement