Một ký hiệu đơn (&) thực hiện thao tác AND một cách khôn ngoan; một dấu hai và (& &) thực hiện một phép toán Boolean AND.
Một chút khôn ngoan và thực hiện thao tác AND trên mỗi bit của cả hai đối số (do đó nó được gọi là "bit-wise"). Do đó, đầu ra của một hoạt động AND-khôn ngoan (hoặc bất kỳ hoạt động bit-khôn ngoan) sẽ không phải là một giá trị boolean. Dưới đây là một số ví dụ về các bit-wise VÀ hoạt động:
1001 & 0001 = 0001
1101 & 1111 = 1101
Một boolean VÀ hoạt động trên hai giá trị boolean và trả về một boolean:
true && true = true
false && true = false
ngắn mạch
Một boolean VÀ hoạt động (& &) cũng có thể được thực hiện trên hai biểu thức trả về giá trị boolean:
int a = 5;
int b = 10;
bool result = (a < 3) && (b > 3);
// result will be false;
Bởi vì biểu thức đầu tiên (a < 3)
đánh giá là false
, kết quả không thể là true
vì BOTH biểu thức phải đánh giá là true
để cho kết quả là true
. Bởi vì điều này, biểu thức thứ hai thậm chí sẽ không được đánh giá. Điều này được gọi là "ngắn mạch". Tuy nhiên, với một hoạt động AND khôn ngoan, cả hai biểu thức cần được đánh giá trước khi thực hiện thao tác. Do đó trong phần lớn các tình huống mà bạn chỉ muốn xác định xem hai điều có đúng hay không (boolean) boolean AND (& &) sẽ là tùy chọn tốt nhất.
Trong ví dụ của bạn, mã sẽ so sánh các bit riêng lẻ trong phạm vi e.Modifiers
với các bit riêng lẻ trong Keys.Shift
. Đối số không đại diện cho một giá trị boolean và do đó hoạt động là bit-khôn ngoan (&) chứ không phải là boolean (& &).
Nguồn
2013-04-17 15:09:53
Google 'bitwise AND', sau đó là google' bit flag'. – mbeckish
bản sao có thể có của [Cái gì đơn lẻ | hoặc & mean?] (http://stackoverflow.com/questions/9736751/what-does-a-single-or-mean) –