Bỏ qua để đến nội dung

Toán tử logic

C++ có 3 toán tử logic cơ bản để kết hợp các điều kiện.

Toán tử Ý nghĩa
&& AND (và)
|| OR (hoặc)
! NOT (phủ định)
#include <iostream>
int main() {
bool a = true, b = false;
std::cout << (a && b) << std::endl; // 0 (false)
std::cout << (a || b) << std::endl; // 1 (true)
std::cout << (!a) << std::endl; // 0 (false)
int age = 20;
bool has_id = true;
if (age >= 18 && has_id) {
std::cout << "Duoc phep vao" << std::endl;
}
return 0;
}

⚠️ Lỗi thường gặp: dùng nhầm & (bitwise AND) hoặc | (bitwise OR) thay vì &&/||. Chúng hoạt động ở mức bit, cho kết quả khác hoàn toàn:

int a = 5, b = 3;
std::cout << (a & b) << std::endl; // 1 (bitwise AND trên các bit: 101 & 011 = 001)
std::cout << (a && b) << std::endl; // 1 (logical AND: cả hai khác 0 → true)

Short-circuit evaluation (đánh giá ngắn mạch)

Phần tiêu đề “Short-circuit evaluation (đánh giá ngắn mạch)”

C++ dừng đánh giá biểu thức logic ngay khi kết quả đã được xác định, không cần đánh giá toàn bộ:

#include <iostream>
bool expensive_check() {
std::cout << "Dang kiem tra..." << std::endl;
return true;
}
int main() {
bool a = false;
if (a && expensive_check()) { // expensive_check() KHÔNG được gọi vì a đã là false
std::cout << "Vao day" << std::endl;
}
return 0;
}

Đây là kỹ thuật thường dùng để tránh lỗi, ví dụ kiểm tra con trỏ null trước khi truy cập (sẽ học ở phần con trỏ):

int* ptr = nullptr;
if (ptr != nullptr && *ptr > 0) { // Nếu ptr là null, *ptr sẽ KHÔNG được thực thi
std::cout << "An toan" << std::endl;
}
int score = 85;
bool is_pass = (score >= 50 && score < 70) || score >= 90;
std::cout << is_pass << std::endl; // 0 (false)
  • C++ dùng &&, ||, ! cho các phép toán logic
  • Cẩn thận không nhầm lẫn &&/|| (logic) với &/| (bitwise) - đây là lỗi rất phổ biến
  • Short-circuit evaluation giúp tránh đánh giá những biểu thức không cần thiết, thường dùng để bảo vệ khỏi lỗi truy cập con trỏ null