2010-09-17 34 views
11

thể trùng lặp:
What are bitwise operators?Thế nào là | và^toán tử được sử dụng cho?

Gần đây tôi đã xem qua một vài mẫu mà sử dụng | và^toán tử. Tôi đoán đây là các toán tử ornegation.

Vì vậy, những gì các nhà khai thác thực sự đại diện cho?

+0

Tại sao điều này được bỏ phiếu để đóng cửa – Simsons

+2

Điều này phải là một số tiền –

+0

Và để được giảm giá quá !!!! – Simsons

Trả lời

17

Nếu bạn áp dụng nó vào loại không thể thiếu, họ Bitwise hay và xor điều hành. Tuy nhiên, nếu bạn áp dụng chúng cho các kiểu boolean, chúng là hợp lý hoặc và xor. Nhìn vào một lời giải thích của or operatorxor operator

Bạn có thể biết thêm chi tiết về hoạt động boolean từ wikipedia truth table

25
  • | = (Bitwise/không chập mạch) "hoặc"
  • ^ = "xor"

và để biết, "không" (Bitwise phủ) là ~

-6

^ Hợp lý XOR

| Hợp lý HOẶC

cập nhật

trong C# hoạt động logic của nó quá:

Console.WriteLine(true^false); // logical exclusive-or 
    Console.WriteLine(false^false); // logical exclusive-or 
+6

-1 Cả hai đều không phải là toán tử logic. Cả hai đều là BitWise ... và bạn trộn lẫn XOR và OR. –

+2

ngoài việc nhận XOR và HOẶC sao lưu bài viết MSDN được liệt kê ở trên từ danh sách emddudley cả hai là logic –

+0

Michael, logic hoặc toán tử || C/C++, lưu ý ở dưới cùng của trang web này (giải thích sự khác biệt giữa logic và bitwise) http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc /language/ref/logore.htm –

7

MSDN có tài liệu trên tất cả các nhà khai thác C# tại địa chỉ:

http://msdn.microsoft.com/en-us/library/6a71f45d.aspx


EDIT - Jon B đã nhận xét rằng một báo giá có liên quan từ tài liệu được liên kết ntation sẽ hữu ích.

|Logical OR operator.

Nhị phân | các toán tử được định nghĩa trước cho các kiểu tách rời và bool. Đối với các loại tích phân, | tính toán bit OR của các toán hạng của nó. Đối với toán hạng bool, | tính toán OR hợp lý của các toán hạng của nó; có nghĩa là, kết quả là sai nếu và chỉ khi cả hai toán hạng của nó là sai.

^Logical XOR operator.

Các toán tử^nhị phân được xác định trước cho các loại tích phân và bool. Đối với các kiểu tích phân,^tính toán OR độc quyền bit của các toán hạng của nó. Đối với toán hạng bool,^tính toán các toán hạng logic hoặc độc quyền của nó; có nghĩa là, kết quả là đúng nếu và chỉ khi chính xác một trong các toán hạng của nó là đúng.

+1

-1 Đăng liên kết tới tài liệu không phải là câu trả lời. –

+1

Hay là ... =)) – Cipi

+1

@Jon B, vì vậy bạn thường muốn lặp lại nhiều lần? Tại sao không sử dụng một nguồn tài nguyên tuyệt vời mà giải thích nó thay vì tái phát minh ra bánh xe? –

2

Với loại không thể thiếu, | là một bitwise hoặc,^một bitwise xor và cho đầy đủ & là một bitwise và.

Với các kiểu boolean, | là boolean hoặc,^a boolean xor và & boolean &.

Để so sánh, || là một boolean mạch ngắn hoặc - nếu toán hạng đầu tiên đánh giá đúng là toán hạng thứ hai không được đánh giá. & & là một boolean mạch ngắn và - nếu toán hạng đầu tiên là false, thứ hạng thứ hai không được đánh giá. Không có mạch ngắn^bởi vì không có trường hợp không cần đánh giá thứ hai.

|| và & & thường được sử dụng hơn | và & trong các trường hợp boolean vì thường có ít nhất một hiệu suất nhỏ và không bao giờ bị mất. Tuy nhiên, nếu toán hạng bên phải có tác dụng phụ, điều quan trọng là phải kích hoạt trong mọi trường hợp, thì | hoặc & sẽ là người dùng. Trong thực tế điều này hiếm, và mùi hôi (nếu tác dụng phụ là quan trọng, nó phải được đánh giá theo một biểu thức riêng biệt để làm cho mục đích rõ ràng hơn).

Chỉnh sửa: Nguồn gây nhầm lẫn tiềm năng là ở một số loại ngôn ngữ khác nhau có thể được sử dụng làm boolean (ví dụ: bạn có thể làm if(53) và nó giống như if(true)) điều này làm cho sự khác biệt giữa các toán tử ở trên khá khác nhau: 'giống nhau nếu một kiểu boolean "thuần túy" được sử dụng (chỉ có giá trị true và false là giá trị có thể của nó) nhưng không khác. C# cố ý không cho phép các phép toán boolean trên các kiểu tách rời một cách chính xác để ngăn chặn khả năng xảy ra lỗi trong các ngôn ngữ đó.

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