Bạn đã bao giờ phải sử dụng sự dịch chuyển bit trong các dự án lập trình thực sự? Hầu hết các ngôn ngữ cấp cao (nếu không phải tất cả) đều có các toán tử thay đổi trong chúng, nhưng khi nào bạn thực sự cần sử dụng chúng?
Bạn đã bao giờ phải sử dụng sự dịch chuyển bit trong các dự án lập trình thực sự? Hầu hết các ngôn ngữ cấp cao (nếu không phải tất cả) đều có các toán tử thay đổi trong chúng, nhưng khi nào bạn thực sự cần sử dụng chúng?
Tôi vẫn viết mã cho các hệ thống không có hỗ trợ dấu chấm động trong phần cứng. Trong các hệ thống này, bạn cần bit-shifting cho gần như tất cả số học của bạn.
Ngoài ra, bạn cần thay đổi để tạo băm. Số học đa thức (CRC, Reed-Solomon Codes là các ứng dụng chính) hoặc sử dụng ca làm việc.
Tuy nhiên, sự thay đổi chỉ được sử dụng bởi vì chúng tiện dụng và thể hiện chính xác những gì người viết dự định. Bạn có thể mô phỏng tất cả các thay đổi bit với phép nhân nếu bạn muốn, nhưng điều đó sẽ khó viết hơn, ít đọc được hơn và đôi khi chậm hơn.
Các trình biên dịch phát hiện các trường hợp mà phép nhân có thể được giảm xuống một ca.
Có, tôi đã sử dụng chúng rất nhiều lần. Bit twiddling là quan trọng trên phần cứng nhúng, nơi bit-mặt nạ là rất phổ biến. Nó cũng rất quan trọng trong việc lập trình trò chơi, khi bạn cần mọi hiệu suất cuối cùng.
Chỉnh sửa: Ngoài ra, tôi sử dụng chúng rất nhiều để thao tác bitmap, ví dụ như thay đổi độ sâu màu hoặc chuyển đổi RGB <-> BGR.
Và tôi không thể nghĩ nhiều trường hợp khi chúng được sử dụng. Nó thường là cách khác xung quanh - có một số vấn đề cụ thể, và nó chỉ ra rằng sử dụng các hoạt động bit sẽ mang lại kết quả tốt nhất (thường là về thời gian thực hiện và / hoặc không gian).
Một nơi tôi sử dụng tất cả thời gian là khi chuyển đổi số cuối của số nguyên cho các ứng dụng đa nền tảng. Họ cũng đôi khi có ích (cùng với các nhà khai thác thao tác bit khác) khi đổ đồ họa 2D.
Tôi đã sử dụng chúng một vài lần, nhưng khá nhiều luôn luôn cho phân tích cú pháp một định dạng tập tin nhị phân.
Bài viết hợp lý ở đây: http://greatjustice.info/the-lost-art-of-bitmasks/
Tốc độ bit nhanh. Chúng được triển khai trong bộ lệnh CPU từ lâu trước khi hoạt động phân chia và mô đun được thực hiện. Nhiều người trong chúng ta đã sử dụng dịch chuyển bit cho số học đơn giản trên bút chì và giấy, nhưng không có sẵn trên các CPU của chúng tôi.
Ví dụ:
Có, vẫn còn cần thiết.
Ở đây trong công việc của tôi ví dụ chúng tôi phát triển phần mềm cho comunication với PLC thông qua cổng COMx nối tiếp. Nó cần thiết để xử lý các bit trong một byte, chúng tôi sử dụng các phép toán trái / phải và toán tử OR, XOR, AND theo từng ngày.
Ví dụ, giả sử chúng ta cần bật bit 3 (phải sang trái) của một byte:
Nó hiệu quả hơn nhiều để làm:
Byte B;
B := B XOR 4;
Thay vì:
Byte B = 0;
String s; // 0 based index
s = ConvertToBinary (B);
s[5] = "1";
B := ConvertToDecimal (s);
Trân trọng.