| Contents |

24 Phép bitwise

Mấy phép số này cho phép bạn thao tác từng bit trong biến, cũng hợp vì C là ngôn ngữ mức thấp152.

Nếu bạn chưa quen với phép bitwise, Wikipedia có bài viết về bitwise khá tốt153.

24.1 Bitwise AND, OR, XOR và NOT

Với từng phép này, các quy đổi số học thông thường diễn ra trên toán hạng (trong trường hợp này phải là kiểu số nguyên), rồi phép bitwise tương ứng được thực hiện.

Phép Toán tử Ví dụ
AND & a = b & c
OR | a = b | c
XOR ^ a = b ^ c
NOT ~ a = ~c

Lưu ý chúng giống toán tử Boolean &&||.

Mấy cái này có biến thể gán tắt tương tự +=-=:

Toán tử Ví dụ Tương đương đầy đủ
&= a &= c a = a & c
|= a |= c a = a | c
^= a ^= c a = a ^ c

24.2 Bitwise shift

Với mấy cái này, integer promotion diễn ra trên từng toán hạng (phải là kiểu số nguyên) rồi bitwise shift được thực hiện. Kiểu của kết quả là kiểu của toán hạng trái sau khi promote.

Bit mới được lấp bằng 0, với một ngoại lệ có thể có được nói trong phần hành vi implementation-defined, bên dưới.

Phép Toán tử Ví dụ
Shift trái << a = b << c
Shift phải >> a = b >> c

Cũng có dạng viết tắt tương tự cho shift:

Toán tử Ví dụ Tương đương đầy đủ
>>= a >>= c a = a >> c
<<= a <<= c a = a << c

Coi chừng hành vi không xác định: không shift số âm, và không shift lớn hơn kích thước của toán hạng trái sau khi promote.

Cũng coi chừng hành vi implementation-defined: nếu bạn shift phải một số âm, kết quả là implementation-defined. (Shift phải một int có dấu thì hoàn toàn ổn, chỉ cần nó là số dương.)


| Contents |