Phép toán thao tác bit Phép toán thao tác bit Bởi: Wiki Pedia Trong ngôn ngữ máy tính, phép toán thao tác bit (tiếng Anh: bitwise operation) thực tính toán (theo bit) hai chuỗi bit, số nhị phân Với nhiều loại máy tính, việc thực thi phép toán thao tác bit thường nhanh so với thực thi phép toán cộng, trừ, nhân, chia Các toán tử thao tác bit Các toán tử thao tác bit (tiếng Anh: bitwise operator) toán tử sử dụng chung với hai số nhị phân để tạo phép toán thao tác bit Hầu hết toán tử thao tác bit toán tử hai NOT Toán tử thao tác bit NOT gọi toán tử lấy phần bù (complement) toán tử có nhiệm vụ phủ định luận lí bit toán hạng - tức đảo thành ngược lại Ví dụ, thực phép toán NOT với số nhị phân 0111: NOT 0111 = 1000 Trong ngôn ngữ lập trình C, C++, Java, C#, toán tử thao tác bit NOT biểu diễn kí hiệu "~" (dấu ngã) Trong Pascal, toán tử "not" Ví dụ: x = ~y; // C Hay x := not y; { Pascal } 1/4 Phép toán thao tác bit Câu lệnh gán cho x giá trị "NOT y" - tức phần bù y Chú ý rằng, toán tử không tương đương với toán tử luận lí "not" (biểu diễn dấu chấm than "!" C/ C++) Về vấn đề này, xin xem toán tử ngôn ngữ C/C++ Toán tử NOT hữu dụng ta cần tìm bù số nhị phân Nó sử dụng làm bước để tìm số bù OR Toán tử thao tác bit OR toán tử hai ngôi, có nhiệm vụ thực tính toán (trên bit) với hai chuỗi bit có độ dài để tạo chuỗi bit có độ dài với hai chuỗi bit ban đầu Trên cặp bit tương ứng hai toán hạng, toán tử OR trả có hai bit 1, tất trường hợp khác, OR tạo bit Ví dụ, thực phép toán OR với hai số nhị phân 0101 0011: 0101 OR 0011 -= 0111 Trong C, C++, Java, C#, toán tử thao tác bit OR biểu diễn kí hiệu "|" (vạch đứng) Trong Pascal, toán tử "or" Ví dụ: x = y | z; // C Hay: x := y or z; { Pascal } Câu lệnh gán cho x kết "y OR z" Chú ý toán tử không tương đương với toán tử luận lí "or" (biểu diễn cặp vạch đứng "||" C/C++) Về vấn đề này, xin xem toán tử ngôn ngữ C/C++ Ứng dụng điển hình toán tử thao tác bit OR dùng để bật (set) bit cụ thể mẫu bit cho trước Ví dụ: giả sử ta có mẩu bit 0010 Ta thấy, bit thứ nhất, thứ hai thứ tư mẩu chưa bật (0), bây giờ, ta muốn bật bit mẩu, ta sử dụng toán tử OR minh họa sau: 0010 OR 1000 2/4 Phép toán thao tác bit -1010 Khi làm việc với máy nhiều không gian nhớ trống, lập trình viên thường áp dụng kĩ thuật Lúc đó, thay khai báo tám biến kiểu bool (C++) độc lập, người ta sử dụng bit riêng lẽ byte để biểu diễn giá trị cho tám biến XOR Cũng giống OR, toán tử thao tác bit XOR (còn gọi OR có loại trừ - exclusive OR) toán tử hai ngôi, có nhiệm vụ thực tính toán (trên bit) với hai chuỗi bit có độ dài để tạo chuỗi bit có độ dài với hai chuỗi bit ban đầu Tuy nhiên, cặp bit tương ứng hai toán hạng, toán tử XOR trả có hai bit (và bit lại 0), ngược lại, XOR trả bit Ví dụ: 0101 XOR 0011 0110 (cách nhớ dễ là: bit giống trả 0, bit khác trả 1) Trong C, C++, Java, C#, toán tử thao tác bit XOR biểu diễn kí hiệu "^" (dấu mũ) Trong Pascal, toán tử "xor" Ví dụ: x = y ^ z; // C Hay: x := y xor z; { Pascal } Câu lệnh gán cho x kết "y XOR z" Các lập trình viên hợp ngữ (Assembly) thường sử dụng toán tử XOR để gán giá trị ghi (register) Khi thực phép toán XOR cho mẫu bit với thân nó, mẫu nhị phân nhận toàn bit Trên nhiều kiến trúc máy tính, sử dụng XOR để gán cho ghi CPU xử lí nhanh so với chuỗi thao tác tương ứng để nạp lưu giá trị vào ghi 3/4 Phép toán thao tác bit Dịch chuyển quay bit Phép dịch bit ký hiệu: >> (dịch phải) > = 2; >> = 1; >> = 0; Giải thích: 5b = 0101 sau dịch trở thành 0010 (=2d) tiếp tục 4/4