C/C++求出最低比特位的位置的宏

#define HASLOWBITS(x, y) ((x) & ((1ULL << (y)) - 1))
#define CONDSHR(x, y) (HASLOWBITS(x, y) ? (x) : (x) >> (y))
#define CONDADD(x, y) (HASLOWBITS(x, y) ? 0 : (y))
#define CONDSHR32(x) CONDSHR(x, 32)
#define CONDSHR48(x) CONDSHR(CONDSHR32(x), 16)
#define CONDSHR56(x) CONDSHR(CONDSHR48(x), 8)
#define CONDSHR60(x) CONDSHR(CONDSHR56(x), 4)
#define CONDSHR62(x) CONDSHR(CONDSHR60(x), 2)
#define CONDADD32(x) CONDADD(x, 32)
#define CONDADD48(x) CONDADD32(x) + CONDADD(CONDSHR32(x), 16)
#define CONDADD56(x) CONDADD48(x) + CONDADD(CONDSHR48(x), 8)
#define CONDADD60(x) CONDADD56(x) + CONDADD(CONDSHR56(x), 4)
#define CONDADD62(x) CONDADD60(x) + CONDADD(CONDSHR60(x), 2)
#define CONDADD63(x) CONDADD62(x) + CONDADD(CONDSHR62(x), 1)

// FIRSTSIGN(x) unfold to the position of the lowest bit of x
#define FIRSTSIGN(x) (x ? CONDADD63((uint64_t)x) : 64)

FIRSTSIGN(x)的值会被展开为x的最低比特位的位置,最高支持64位整数,若x为0,则展开为64.

宏定义中使用了uint64_t类型,因此需要包含头文件。
C头文件:

#include <stdint.h>

C++头文件:

#include <cstdint>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值