cpp位操作模板函数

/*以下模板函数中的a、b变量值的含义
bit location define: 
0~31
31 ... 24 23 ... 16 15 ... 8 7 ... 0

0~63
63 ... 32 31 ... 24 23 ... 16 15 ... 8 7 ... 0
*/

//get bits a-->b from f
template<typename T>
T GetBits(T f, UINT32 a, UINT32 b)
{
	ASSERT((a >= 0) && (b < (sizeof(T)<<3)) && (a <= b));
	return T((((UINT64)f)&(((1<<(b-a+1))-1)<<a))>>a);
}
//get one bit from f
template<typename T>
T GetBit(T f, UINT32 a)
{
	ASSERT((a >= 0) && (a < (sizeof(T)<<3)));
	return T((((UINT64)f)&((UINT64)1<<a))>>a);
}
//set bits a-->b from f to t
template<typename T>
void SetBits(T &t, T f, UINT32 a, UINT32 b)
{
	ASSERT((a >= 0) && (b < (sizeof(T)<<3)) && (a <= b) 
		&& (f < (T)(1<<(b-a+1))));
	t=T(((((UINT64)(f))&((1<<(b-a+1))-1))<<a)
		|((UINT64)(t)&(~(((1<<(b-a+1))-1)<<a))));
}
//set one bit from f to t
template<typename T>
void SetBit(T &t, T f, UINT32 a)
{
	ASSERT((a >= 0) && (a < (sizeof(T)<<3)) && ((f==0)||(f==1)));
	t=((f==1)? (T((UINT64)(t))|(1<<a)):(T((UINT64)(t))&(~(1<<a))));
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值