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