Se gira a la copia a mano de ISO/IEC 23270:2006 — Information technology — Programming languages — C# y gire a § 14.6. 4 de la santa escritura. Allí encontrará:
14.6.4 bit a bit operador de complemento
Para una operación de la forma se aplica ~ x, la resolución de la sobrecarga de operador unitario (§14.2.3) para seleccionar un operador específico implementación. El operando se convierte al tipo de parámetro del operador seleccionado, y el tipo de resultado es el tipo de retorno del operador. Los operadores bit a bit del complemento predefinidos son:
int operator ~(int x) ;
uint operator ~(uint x) ;
long operator ~(long x) ;
ulong operator ~(ulong x) ;
Para cada uno de estos operadores, el resultado de la operación es el complemento bit a bit de x.
Cada tipo de enumeración E proporciona implícitamente el siguiente operador de bits complemento:
E operator ~(E x);
El resultado de la evaluación ~x
, donde x
es una expresión de un tipo de enumeración E
con un tipo subyacente U
, es exactamente el mismo que evaluando unchecked((E)(~(U)x))
. Este operador solo es considerado por la resolución de sobrecarga del operador unario cuando el tipo de operando es el tipo de enumeración E
(§14.2.3).
Las formas elevadas (§14.2.7) de los operadores de complemento a nivel de bits predefinidos no definidos definidos anteriormente también están predefinidas.
En su caso ~31
es lo mismo que ~ 0x0000001F
. El complemento bit a bit de 0x0000001F
es 0xFFFFFFE0
. Por qué no solo escribieron la máscara real que querían está más allá de mí.
Es el complemento bit a bit. Vea el enlace a continuación. [¿Cómo funciona el trabajo del operador AND bit a bit del complemento] [1] [1]: Para http://stackoverflow.com/questions/791328/how-does-the-bitwise-complement-operator-work – Nerdtron
futuro ref aquí está la lista de operadores C#. [Operadores de C#] (http://msdn.microsoft.com/en-us/library/6a71f45d.aspx) –