写一个宏,判断整数的某一位是否为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值