Câu trả lời:
Tôi là một chút bối rối bởi các tài liệu MSDN C # trong đó nêu rằng
&
và|
là nhà khai thác hợp lý và đó&&
và||
là nhà khai thác có điều kiện. Tôi liên tục gọi&&
,||
và!
các nhà khai thác logic, vì vậy tôi sai?
Không; bạn hoàn toàn đúng.
Có rất nhiều lỗi danh pháp nhỏ, chủ yếu là không quan trọng trong tài liệu MSDN; Tôi đã cố gắng đưa ra càng nhiều càng tốt, nhưng trong trường hợp nó không quá sai và gây hiểu lầm, thì đó không phải lúc nào cũng là cách sử dụng thời gian khôn ngoan. Đi đến đặc tả nếu bạn muốn một tuyên bố dứt khoát về tên của tính năng C #.
Vì vậy: cơ quan có liên quan là đặc tả C #, nêu trong phần 7.11:
Các
&
,^
và|
các nhà khai thác này được gọi là các toán tử logic.
Sau đó, nó tiếp tục chia nhỏ các toán tử logic tích hợp thành các toán tử logic số nguyên, liệt kê, Boolean và nullable-Boolean. Ngoài ra còn có các toán tử logic do người dùng định nghĩa; xem thông số kỹ thuật để biết chi tiết
Trong phần 7.12, chúng ta có
Các toán tử
&&
và||
được gọi là các toán tử logic có điều kiện. Chúng cũng được gọi là các toán tử logic ngắn mạch của Wikipedia.
Vì vậy, tất cả chúng là các toán tử logic . Một số trong số họ là toán tử logic có điều kiện .
Điều gì làm cho các toán tử logic có điều kiện có điều kiện ? Người ta có thể đoán rằng đó là vì chúng thường được sử dụng trong các câu điều kiện ( if
) hoặc biểu thức điều kiện ( ? :
). Lý do thực sự được đưa ra bởi đặc tả:
Các toán tử
&&
và||
toán tử là các phiên bản có điều kiện của các toán tử&
và|
toán tử: Thao tácx && y
tương ứng với thao tácx & y
, ngoại trừ chỉy
được đánh giá nếux
không sai. Hoạt độngx || y
tương ứng với hoạt độngx | y
, ngoại trừ chỉy
được đánh giá nếux
không đúng.
Do đó, các toán tử logic có điều kiện được đặt tên vì toán hạng bên phải được đánh giá có điều kiện tùy thuộc vào giá trị của toán hạng bên trái.
Chúng ta có thể thấy điều này một cách sinh động hơn bằng cách lưu ý rằng các toán tử logic có điều kiện chỉ là "đường cú pháp" cho các biểu thức điều kiện . x && y
chỉ đơn giản là một cách dễ chịu hơn để viết x ? y : false
, và x || y
đơn giản là một cách dễ chịu hơn để viết x ? true : y
. Các biểu thức logic có điều kiện thực sự là các biểu thức điều kiện.
Ngoài ra còn có một hình thức do người dùng xác định của toán tử logic có điều kiện và nó hơi khó. Xem thông số kỹ thuật để biết chi tiết.
Đọc thêm, nếu chủ đề này làm bạn quan tâm:
Trong C # đây là tất cả các toán tử logic.
int x = 0xABCD & 0xFF // x == 0xCD
&&
và ||
được gọi là " toán tử logic có điều kiện " bởi vì chúng bị đoản mạch.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Lưu ý rằng thuật ngữ này khác nhau từ ngôn ngữ này sang ngôn ngữ khác. Trong C và C ++ &&
và ||
chỉ là các toán tử logic. Trong Java &
và |
được gọi là Toán tử Bitwise , trong khi C và C ++ phân loại chúng là Toán tử số học .
Vấn đề là &
và |
là các toán tử bitwise , có nghĩa là chúng được áp dụng và mang lại các giá trị chuỗi bit. Và bitwise là một thuật ngữ rất được sử dụng trong các lập trình viên.
Ví dụ 0xff & 0x00 == 0x00
, trong khi 0xff | 0x00 == 0xff
.
Và &&
và ||
được áp dụng cho điều kiện, và mang lại giá trị thông thường của điều kiện; tức là true
và false
.
Ví dụ true && false == false
, trong khi true || false == true
.
Do đó &&
và ||
có thể được gọi là toán tử có điều kiện , mặc dù đó không phải là một thuật ngữ thông thường giữa các lập trình viên.
Tất nhiên, mọi lập trình viên C, C ++, Java và C # đều biết tất cả điều đó. Nhưng tôi đoán rằng sự hiểu lầm xảy ra bởi vì "toán tử có điều kiện" không phải là một thuật ngữ thường xuyên được sử dụng bởi các lập trình viên.
|
hoán đổi cho nhau||
, mặc dù trong nhiều trường hợp chúng có thể được thay thế mà không có thay đổi rõ ràng trong hành vi chương trình.