Một số hàm khó hiểu nhưng hiệu quả
Hàm khó hiểu, ít dùng nhưng rất hiệu quả trong khi lập trình với CCS C compiler vì tốc độ xử lý nhanh hơn hẳn nếu ta viết thành các hàm theo cách thông thường
1. Shift_left và Shift_right
Shift_right(&data, num , value)
Theo lý thuyết, data là dữ liệu kiểu mảng hoặc tương tự, là nơi ghi kết quả
Num là số byte làm việc
Value là 0 hoặc 1 nhận được từ đầu vào
Hàm này sẽ dịch phải 1 bit và ghi giá trị value vào bit trống vừa mới tạo ra từ phép dịch
Hàm có trị trả về là giá trị bit của bit vừa mới bị loại ra từ phép dịch
ví dụ data=0x89 kết quả của shift_right(&data,1,1) sẽ có mô phỏng như sau
Hàm trả ra giá trị 1 và giá trị của data = 0xC4
Shift_left (&data, num , value)
Theo lý thuyết, data là dữ liệu kiểu mảng hoặc tương tự, là nơi ghi kết quả
Num là số byte làm việc
Value là 0 hoặc 1 nhận được từ đầu vào
Hàm này sẽ dịch trái 1 bit và ghi giá trị value vào bit trống vừa mới tạo ra từ phép dịch
Như hàm shift_right, nhưng chỉ khác thực hiện theo chiều ngược lại
2. Macro xử lý bit
Kiểm tra bit thứ bitnum là 0 hay 1
#define testBit(var, bitnum) (var)&(1<<(bitnum))
Thiết lập bit thứ bitnum giá trị 1
#define setBit(var, bitnum) (var)|=(1<<(bitnum))
Thiết lập bit thứ bitnum giá trị 0
#define clearBit(var, bitnum) (var)&=~(1<<(bitnum))