按位 AND

int a = 6;     // 0110b  (0x06)
int b = 10;    // 1010b  (0x0A)
int c = a & b; // 0010b  (0x02)

std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;

輸出

a = 6, b = 10, c = 2

為什麼

有點明智的 AND 在位級操作並使用以下布林真值表:

TRUE  AND TRUE  = TRUE
TRUE  AND FALSE = FALSE
FALSE AND FALSE = FALSE

a0110)的二進位制值和 b1010)的二進位制值是 AND‘時,我們得到 0010 的二進位制值:

int a = 0 1 1 0
int b = 1 0 1 0 &
        ---------
int c = 0 0 1 0

除非特別指定使用按位分配複合運算子 &=,否則按位 AND 不會更改原始值的值:

int a = 5;  // 0101b  (0x05)
a &= 10;    // a = 0101b & 1010b