2011-01-22 18 views

risposta

5

L'operatore ~ ​​è un po 'inverso, quindi ~ 0 fornisce un valore intero con tutti (in binario).

5

È una negazione bit per bit dei byte 0000 .... 0000. È il valore di un intero in cui tutti i bit sono impostati su 1.

In una situazione senza segno sarebbe il valore massimo possibile. In una situazione firmata è -1.

4

~ è l'operatore del complemento, che capovolge i bit dell'operando. Poiché zero non ha bit impostati, il complemento avrà tutti i bit impostati, che è anche il numero intero di dimensioni massime (assumendo unsigned). Per i numeri firmati, avrai invece -1, quindi chiamarlo "max" è un termine improprio.

3

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

Un 0 letterale (come nel codice sopra) è un int.
Un valore int è un valore binario a 32 bit. Il valore 0 ha tutti i bit impostati su 0.

L'operatore ~ ​​è un complimento bit per bit. io scambia tutti i bit.
Come tutti i bit sono 0 sono tutti trasformati in 1. Quindi abbiamo un valore a 32 bit
con tutti i bit impostati a 1.

C# usi taglienti 2 complimento. Che codifica -1 in un int come tutti i bit essendo 1

0000 0000 0000 0000 0000 0000 0000 0000 == 0 

operator ~ 

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

So =>~0 == -1

+0

Curiosità sul voto negativo? –

3

~ significa bit non si inverte tutti i bit del numero intero determinato. In un int firmato questo ti darà -1 (dal momento che tutti i bit nell'int saranno capovolti da 0 a 1.) Cerca il complemento a due per maggiori informazioni su questo.

In un unsigned int (uint) questo darebbe il valore massimo di un numero intero (dal momento che il bit più significativo in un unsigned int non determina il segno.)

3

Come osservato, ~ 0 cede 0xFFFFFFFF .

Tuttavia, ho il sospetto che il programmatore originale sia confuso. l'esecuzione di int max = ~0 ; imposta il numero intero con segno max sul valore -1.

8

L'operatore ~ è l'operatore di complemento bit per bit unario che calcola il complemento bit a bit. Ciò significa che inverte tutti i bit nel suo argomento (0 diventano 1 e 1 diventa 0). Così,

int max = ~0; 

che è l'impostazione max alla negazione del valore di 32 bit 0000 0000 0000 0000 0000 0000 0000 0000 conseguente 1111 1111 1111 1111 1111 1111 1111 1111. Poiché stiamo memorizzando questo risultato in un Int32, è lo stesso di -1.

Se o non è meglio dire

int max = ~0; 

o

int max = -1; 

dipende dal contesto. Se il punto di max è di avere un numero di cui tutti i bit sono 1, sceglierei il primo. Se il punto di max è quello di calcolare il massimo di un elenco di numeri interi non negativi, sceglierei quest'ultimo (beh, preferirei lo int max = Int32.MinValue; e anche di più, preferirei semplicemente lo int max = list.Max();).

0

Come altri hanno affermato, ~ è l'operatore di negazione bit per bit. Prenderà tutti i bit del valore intero e commuta tra 0 e 1 (0 -> 1 e 1 -> 0).

~ 0 corrisponde a -1 per un numero intero con segno o Int32.

Normalmente, il valore "0" o "-1" viene utilizzato come maschera "ALL INCLUSIVE" (asterisco) quando si implementa un sistema di filtro basato sui livelli in cui si utilizza un argomento "layerMask" che per impostazione predefinita equivale a: 1 significa che restituirà qualcosa (non filtra). Il filtro sta infatti utilizzando un'operazione AND (valueToFilter & layerMask).

valueToFilter & -1 sarà sempre diverso da zero se valueToFilter è anche diverso da zero. Zero altrimenti.