通过位运算快速获得二进制前i位为0或1的掩码

文章介绍了如何使用C++模板函数创建一个掩码,该掩码能通过左移操作使指定的前i位变为0,然后通过取反操作得到前i位为1的效果。具体方法是将1左移sizeof(T)*8-i位来生成前i位为0的掩码,再进行取反操作得到前i位为1的结果。
摘要由CSDN通过智能技术生成

c++ 二进制左移快速前i位置0

template<class T>
static T CreateMask(uint32_t bits) {
    return (1 << (sizeof(T) * 8 - bits)) - 1;
}
1 写为二进制为 0b00000001
假设 :将1左移2位 得到 0b00000100 ,将其减一得到 0b00000011
刚好将后2位置为1

因此,左移i位后i位为1,前sizeof(T)*8-i位为0。

所以想要获得前i位为0的二进制掩码,需要将1左移sizeof(T)*8 - i。

c++ 二进制左移快速前i位置1

在前i位置0的基础上取反~即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值