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))