Bitwise AND: &. Logical AND: &&. Các khác biệt cơ bản:
- Toán hạng & kiểu trả về:
&&làm việc trên biểu thức logic, trả về boolean (0/1).&làm việc trên số nguyên (int, short, long, unsigned), trả về cùng kiểu số nguyên.
Ví dụ
#include <iostream>
using namespace std;
int main() {
int x = 3; // 0011
int y = 7; // 0111
if (y > 1 && y > x)
cout << "y lon hon 1 VA x\n";
int z = x & y; // 0011 & 0111 = 0011 = 3
cout << "z = " << z;
}
Kết quả
y lon hon 1 VA x z = 3
- Short-circuit evaluation:
&&không đánh giá toán hạng 2 nếu toán hạng 1 là false.||không đánh giá toán hạng 2 nếu toán hạng 1 là true. Nhưng&và|luôn đánh giá cả hai toán hạng.
Ví dụ
#include <iostream>
using namespace std;
int main() {
int x = 0;
cout << (x && printf("Test && ")) << endl; // printf KHÔNG chạy
cout << (x & printf("Test & ")); // printf CÓ chạy
}
Kết quả
0 Test & 0