2013-04-12 32 views
5

Hôm nay tôi thấy mã này:không "~" nghĩa là gì trước khi enums

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

Và tôi không thể hiểu được. "~" - Đây là một sai lầm? Theo như tôi nhớ, "~" được đặt trước các destructors. Nhưng điều này là enum. Và mã này được biên dịch!

+0

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

+1

'~' không phải là biểu tượng duy nhất có nhiều ý nghĩa không liên quan. Có '*': con trỏ và phép nhân có ít liên quan đến nhau. – hvd

+1

@CuongLe no it; ở mức bit riêng lẻ, 0 & ~ 1 => 0, trong đó- như 0^1 => 1. Hoặc lấy một ví dụ cụ thể: 3 & ~ 5 => 2, 3^5 => 6. Trong ví dụ này 3 và 5 là nhị phân '0011' và' 0101', được chọn một cách có chủ ý để tạo một bảng chân lý. Nếu '& ~' là "bằng" '^', kết quả sẽ giống nhau. –

Trả lời

6

Đó là toán tử phủ định bitwise.

~ Operator (C# Reference)

Nhà điều hành ~ thực hiện một hoạt động bổ sung Bitwise trên toán hạng của nó, mà có tác dụng đảo ngược từng bit. Các toán tử bitwise bổ sung được xác định trước cho int, uint, longulong.

Và bởi vì hoạt động trên các loại không thể thiếu thường được cho phép trên liệt kê bạn có thể sử dụng ~ với enums ủng hộ với các loại được liệt kê ở trên.

+4

Hữu ích cho các bảng liệt kê được đánh dấu bằng 'FlagsAttribute' (giống như các toán tử bitwise khác). – Oded

Các vấn đề liên quan