2011-01-22 24 views

Respuesta

5

El ~ operador es un poco inverso, por lo que ~ 0 le da un valor entero con todos los (en binario).

5

Es una negación por bits de los bytes 0000 .... 0000. Es el valor de un entero donde todos los bits están configurados en 1.

En una situación sin firmar, sería el valor máximo posible. En una situación firmada es -1.

4

~ es el operador complementario, que voltea los bits del operando. Como cero no tiene ningún conjunto de bits, el complemento tendrá todos los bits configurados, que también es el entero de tamaño máximo (suponiendo que no está firmado). Para los números con signo, obtendrás -1 en su lugar, por lo que llamarlo "máximo" es un nombre inapropiado.

3

Complemento de bit a bit.
http://msdn.microsoft.com/en-us/library/d2bd4x66.aspx

A literal 0 (como en el código anterior) es un int.
Un int es un valor binario de 32 bits. El valor 0 tiene todos los bits configurados en 0.

El ~ operador es un cumplido a nivel de bit. es decir, canjeo todos los bits.
Como todos los bits 0 eran todos ellos son convertidos en 1. Así que tenemos un valor de 32 bits
con todos los bits puestos a 1.

C# 2 afilados usos cumplido. Que codifica -1 en un int como todos los bits siendo 1

0000 0000 0000 0000 0000 0000 0000 0000 == 0 

operator ~ 

1111 1111 1111 1111 1111 1111 1111 1111 == -1 

So =>~0 == -1

+0

Curiosidades sobre el voto negativo? –

3

~ significa bit a bit no, se invierte todos los bits en el número entero dado. En un int firmado esto le dará -1 (dado que todos los bits en el int se pasarán de 0 a 1.) Busque el complemento de dos para obtener más información sobre este.

En un entero sin signo (uint) esto le daría el valor máximo de un entero (desde el bit más significativo en un unsigned int no determina el signo.)

3

Como se ha señalado, ~ 0 produce 0xFFFFFFFF .

Sin embargo, sospecho que el programador original está confundido. ejecutando int max = ~0 ; establece el entero con signo max en el valor -1.

8

El operador ~ es el operador de complemento bit a bit unario que calcula el complemento bit a bit. Esto significa que invierte todos los bits en su argumento (0s se convierten en 1s y 1s se convierten en 0s). Por lo tanto,

int max = ~0; 

que se ajuste max a la negación del valor de 32 bits 0000 0000 0000 0000 0000 0000 0000 0000 resultante en 1111 1111 1111 1111 1111 1111 1111 1111. Como estamos almacenando este resultado en un Int32, esto es lo mismo que -1.

Si es o no es mejor decir

int max = ~0; 

o

int max = -1; 

depende del contexto. Si el punto de max es tener un número cuyos bits sean 1, elegiría el primero. Si el punto de max es calcular el máximo de una lista de enteros no negativos, elegiría el último (bueno, preferiría int max = Int32.MinValue; y aún más, preferiría int max = list.Max();).

0

Como han dicho otros, ~ es el operador de negación a nivel de bit. Tomará todos los bits del valor entero y conmutará 0 y 1 (0 -> 1 y 1 -> 0).

~ 0 es igual a -1 para un entero con signo o Int32.

Por lo general ~ 0 o -1 se usa como la máscara "TODO INCLUIDO" (asterisco) cuando se implementa un sistema de filtrado basado en capas donde se usa un argumento "layerMask" que por defecto es igual a - 1 lo que significa que devolverá algo (no se filtra). El filtro está utilizando una operación AND (valueToFilter & layerMask).

valueToFilter & -1 siempre será distinto de cero si valueToFilter también es distinto de cero. Cero de lo contrario.

Cuestiones relacionadas