& ( AND ): lấy 2 số như toán hạng thực hiện phép AND trên mỗi bit tương ứng của 2 số.Kết quả từng phép xử lý trên cặp bit bằng 1 nếu cả 2 đều là 1.
| ( OR ):Tương tự trả về 1 nếu một trong 2 bit bằng 1.
^ ( XOR ): Trả về 1 nếu 2 bit khác nhau.
~ ( NOT ): Đảo ngược tất cả các bit.
<< (Dịch trái): Dịch trái số bit n của toán hạng đầu tiên. Toán hạng thứ 2 quy định số n bit dịch.
>>(Dịch phải): Dịch phải số bit n của toán hạng đầu tiên. Toán hạng thứ 2 quy định số n bit dịch.
! NOTE:
- Toán tử dịch trái và dịch phải không dùng cho số âm (negative numbers):
-Kết quả không được xác định nếu có bất cứ toán hạng nào negative numbers.
Vd: -1<<1 hay 1<<-1.
-Tương tự số lượng bit dịch nếu vượt quá size of integer thì không thể xác định được kết quả.
Vd: 1<<33.
- Toán tử XOR thì được sử dụng phổ biến trong các cuộc phỏng vấn kỹ thuật.
-Nó thì được dùng để giải quyết nhiều vấn đề.
Xét ví dụ sau: cho một danh sách các số mà ở đó tất các số đều có tần xuất xuất hiện chẵn ngoại trừ một số. Hãy tìm giá trị của số có số lần xuất hiện lẻ.
Mình tâm đắc nhất đối với chức năng đặc biệt này của XOR. Great !
- Những toán tử xử lý trên bit không nên được dùng trong cùng vị trí với toán tử logic.
- Kết quả của một logical operator ( &&, || và !) là 1 hoặc 0. Nhưng kết quả trả về của toán tử bit là một giá trị kiểu integer. Toán tử logic chỉ trả về là 0 (false) hoặc 1 (true). Các toán hạng thực hiện toán tử logic, nếu là số 0 thì nó xem là false và tất cả các số khác 0 xem là true. Xem ví dụ bên dưới:
- Toán tử dịch trái và dịch phải tương đương với với phép nhân và phép chia.
-Ở chú ý đầu tiên, ta đã nói 2 toán tử trên chỉ làm việc với số dương (positive numbers)
-Dịch trái tương ứng với phép nhân ( 19*2=38 ) và dịch phải tương ứng với phép chia (19/2=9).
- Toán tử & có thể được dùng để kiểm tra nhanh là số chẵn hay lẻ.
Gía trị trả về của phép toán x & 1 là khác 0 nếu như x là số lẻ, nếu chẵn thì là 0.
- Toán tử ~ nên được sử dụng một cách cẩn thận
Kết quả khi thực hiện toán tử t ~ trên số nhỏ có thể cho ra kết quả một số lớn nếu kết quả được lưu với kiểu dữ liệu không dấu.Và có thể thành số âm nếu được lưu với kiểu dữ liệu có dấu.
ÁP DỤNG: bài toán LARGEST PRIME FACTOR ta sẽ thay việc check tính chia hết và thực hiện phép chia cho 2 bằng cách áp dụng toán tử dịch bit sang phải. Gíup chương trình nhanh hơn, do số lần lập của bài này vẫn còn ít nên mình không thể đo được time chạy của thuật toán để thấy được khác biệt.
Edited by me.












Không có nhận xét nào:
Đăng nhận xét