Mục lục:
Video: C - Bài 08B: Toán tử thao tác trên bit 2025
Sự hiểu nhầm của các nhà khai thác lập trình C cung cấp thao tác dữ liệu ở mức nhị phân. Các nhà khai thác rất dễ bỏ qua, nhưng chỉ khi nào sức mạnh thực sự và tính hữu dụng của họ không được đánh giá cao.
Các ~ và! toán tử
Hai toán tử nhị phân không thường xuyên là ~ (hoặc 1 của bổ sung) và! (hay không). Họ thiếu sự quyến rũ của các nhà khai thác hợp lý bitwise, nhưng họ có một nơi.
Toán tử bổ sung 1 bổ sung tất cả các bit trong một giá trị, biến 1 thành 0 và 0 thành 1. Ví dụ:
~ 01010011 = 10101100
! (NOT) tác động đến toàn bộ giá trị - tất cả các bit. Nó thay đổi bất kỳ giá trị nào khác 0, và giá trị 0-1:
! 01010011 = 00000000! 00000000 = 00000001
Không và 1 là hai kết quả duy nhất có thể khi sử dụng bitwise! nhà điều hành.
Cả hai ~ và! toán tử là các toán tử đơn vị - bạn chỉ đơn giản là tiền tố một giá trị để có được kết quả.
Nhà điều hành | Tên | Loại | Hành động |
---|---|---|---|
& | VÀ | Bitwise | Mặt nạ, đặt lại vài bit xuống 0 và để lại một mình |
HO ORC | Bitwise | Đặt bit, thay đổi bit cụ thể từ 0 xuống 1 | ^ |
XOR | Bitwise | Thay đổi bit thành 0 khi khớp; 1 | Bổ sung 1 |
Unary | Rút lại tất cả các bit | ~ | KHÔNG |
Unary | Thay đổi các giá trị khác 0 thành 0; 0, đến 1 | Chức năng | binbin () |
|
Câu lệnh đầu tiên thực hiện một mask AND với giá trị n. Tất cả trừ phần nhỏ bên trái của con số này sẽ bị loại bỏ. Nếu bit đó được thiết lập, điều này làm cho nó trở thành một điều kiện TRUE, ký tự 1 được lưu trữ trong mảng; nếu không, ký tự 0 được lưu trữ.
Giá trị được biểu diễn là 0x80, là ký hiệu thập lục phân, một loại viết tắt cho nhị phân. Giá trị hex 0x80 bằng 10000000 nhị phân, là mặt nạ AND. Nếu giá trị là 16 bit thay vì 8, thì 0x8000 được sử dụng để tạo ra một mặt nạ nhị phân 16 bit.
Câu lệnh thứ hai làm thay đổi các bit trong giá trị n nốt sang trái. Khi vòng lặp quay, làm việc thông qua giá trị n, một bit khác trong giá trị được chuyển sang vị trí cuối cùng bên trái. Bit đó được đánh giá, và chuỗi nhị phân được xây dựng bằng cách chèn ký tự '1' hoặc '0'.