linux kernel bisops.h - test_bit函数解析
static inline int test_bit(int nr, const volatile void * addr) { return (1UL & (((const int *) addr)[nr >> 5] >> (nr & 31))) != 0UL; }
参数nr 第几位
参数addr 测试数的地址可以为数组
#include <stdio.h> static inline int test_bit(int nr, const volatile void * addr) { return (1UL & (((const int *) addr)[nr >> 5] >> (nr & 31))) != 0UL; } int main() { int a[] = {1, 1, 1}; for (int i = 0; i < sizeof(a) * 8; ++i) { printf("%d: %d\n", i, test_bit(i, a)); } return 0; }
输出:
0: 1 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 8: 0 9: 0 10: 0 11: 0 12: 0 13: 0 14: 0 15: 0 16: 0 17: 0 18: 0 19: 0 20: 0 21: 0 22: 0 23: 0 24: 0 25: 0 26: 0 27: 0 28: 0 29: 0 30: 0 31: 0 32: 1 33: 0 34: 0 35: 0 36: 0 37: 0 38: 0 39: 0 40: 0 41: 0 42: 0 43: 0 44: 0 45: 0 46: 0 47: 0 48: 0 49: 0 50: 0 51: 0 52: 0 53: 0 54: 0 55: 0 56: 0 57: 0 58: 0 59: 0 60: 0 61: 0 62: 0 63: 0 64: 1 65: 0 66: 0 67: 0 68: 0 69: 0 70: 0 71: 0 72: 0 73: 0 74: 0 75: 0 76: 0 77: 0 78: 0 79: 0 80: 0 81: 0 82: 0 83: 0 84: 0 85: 0 86: 0 87: 0 88: 0 89: 0 90: 0 91: 0 92: 0 93: 0 94: 0 95: 0