bitops.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:1k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #ifndef BITOPS_H
  2. #define BITOPS_H
  3. #include "string.h"      /* due to memset */
  4. /* determines if bit number "bit_nb" is set in array "arr" */
  5. #define IS_BIT_SET(arr, bit_nb) (((unsigned char*) arr)[(bit_nb) >> 3] & 
  6.     (((unsigned char) 1) << ((bit_nb) & 7)))
  7. /* determines if bit number "bit_nb" is set in array "arr" */
  8. #define IS_BIT_CLEARED(arr, bit_nb) (! IS_BIT_SET(arr, bit_nb))
  9. /* resets bit "bit_nb" in array "arr" */
  10. #define RESET_BIT(arr, bit_nb) (((unsigned char*) arr)[(bit_nb) >> 3] &= ~(((unsigned char) 1) << ((bit_nb) & 7)))
  11. /* sets bit "bit_nb" in array "arr" */
  12. #define SET_BIT(arr, bit_nb)   (((unsigned char*) arr)[(bit_nb) >> 3] |=   ((unsigned char) 1) << ((bit_nb) & 7))
  13. /* set the first nb_bits in array arr */
  14. inline void SET_ALL_BITS(unsigned char* arr, unsigned long nb_bits)
  15. {
  16.     memset(arr, 255, nb_bits >> 3);
  17.     if(nb_bits & 7) {
  18.         arr[nb_bits >> 3] |= ((unsigned char) 255) >> (8 - (nb_bits & 7));
  19.     }
  20. }
  21. /* reset the first nb_bits in array arr */
  22. inline void RESET_ALL_BITS(unsigned char* arr, unsigned long nb_bits)
  23. {
  24.     memset(arr, 0, nb_bits >> 3);
  25.     if(nb_bits & 7) {
  26.         arr[nb_bits >> 3] &= ((unsigned char) 255) << (nb_bits & 7);
  27.     }
  28. }
  29. #endif