写一个宏,判断整数的某一位是否为1

//判断一个数的第n位是否为1,n从0开始
#define IS_ONE(number, n) ((number >> n) & (0x1))
/*number右移n位, 那么要显示的那一位就到了第0位
然后number 与 0x1 相与
如果number第0位为0, 那么相与的结果就是0
如果number第0位为1, 那么相与的结果就是1
从而实现某一位是否为1*/

一个位图数组,unsigned int BIT_MAP[MAXSIZE],写一个宏,判断其中第x位是否为1.
#define IS_BIT_SET(BIT_MAP, x) (((BIT_MAP[x/sizeof(unsigned int)]) >> (x%sizeof(unsigned int))) & (0x1))

思路:
数组的每一个元素是一个int型数据,一个数据占32bit,
首先由输入的x,求出数组的下标,和此下标中的第几位(0到31),

比如输入x为95, 95/32 = 2余31
则对应的是BIT_MAP[2] 的第31位。

遗留:如果输入的x超过了数组的范围,怎么办呢?

原文地址:https://www.cnblogs.com/suiyuemanbu/p/3683096.html