[linux-3.0]
BITS_TO_LONGS
定义在:include/linux/bitops.h
#define BITS_PER_BYTE 8
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
DIV_ROUND_UP
定义在:include/linux/kernel.h (line 58)
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
其目的就是求一个数是几个long的长度。
例:sizeof(long) = 4;
则
BITS_TO_LONGS(31) = 1
BITS_TO_LONGS(32) = 1
BITS_TO_LONGS(33) = 2
The following is the test code:
[cpp] view plaincopy
#include <stdio.h>
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#define BITS_PER_BYTE 8
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
main()
{
int j = 32;
printf("The size of long is %ld\n", sizeof(long));
printf("The convertion result is %ld\n", BITS_TO_LONGS(j));
}