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

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的基础上取反~即可

猜你喜欢

转载自blog.csdn.net/qq_55796594/article/details/129064981
今日推荐