2013-04-12 17 views
5

Dziś widzę ten kod:Co oznacza "~" oznacza, zanim teksty stałe

ViewBag.country = from p in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures) 
           select new SelectListItem 
           { 
            Text = p.EnglishName, 
            Value = p.DisplayName 
           }; 

I nie mogę zrozumieć. "~" - To błąd? O ile pamiętam, "~" znajduje się przed destruktorami. Ale to jest enum. I ten kod skompilowany!

+0

http://stackoverflow.com/q/93744/284240 –

+1

'~' nie jest jedynym symbolem o wielu niepowiązanych znaczeniach. Jest "*": wskaźniki i mnożenie mają niewiele wspólnego ze sobą. – hvd

+1

@CuongLe nie, nie jest; na poziomie pojedynczego bitu, 0 i ~ 1 => 0, gdzie 0^1 => 1. Lub na konkretny przykład: 3 i ~ 5 => 2, 3^5 => 6. W tym przykładzie 3 a 5 to binarne '0011' i' 0101', celowo wybrane, aby stworzyć tabelę prawdy. Jeśli '& ~" był "równy z" ^, to wynik byłby identyczny. –

Odpowiedz

6

To operacja negacji bitowej.

~ Operator (C# Reference)

Operator ~ wykonuje bitową operację dopełniacza na jego operandu , które powoduje odwrócenie każdego bitu. Operatory bitowego dopełnienia są predefiniowane dla int, uint, long i ulong.

A ponieważ operacje na integralnych rodzaju są powszechnie akceptowane na wyliczenie można użyć ~ z teksty stałe obstawione z typów wymienionych powyżej.

+4

Przydatny dla wyliczeń oznaczonych "FlagsAttribute" (podobnie jak inne operatory bitowe). – Oded