【发布时间】:2011-03-27 00:11:36
【问题描述】:
我有一个简单的函数:
int bitcount( unsigned );
int shiftbit( unsigned val ) {
return (int)(~0U << (( sizeof(int)*CHAR_BIT ) - bitcount(val)));
}
我正在计算 int 中的位数,然后创建一个位掩码,该位掩码使该位数左对齐。例如,0xABCD 设置了 10 位,返回掩码 0xFFC0000。
该函数工作得很好,除非位计数为零,在这种情况下,我得到 -1,0xffffffff,而我应该得到一个空位掩码,即 0x0。我只是不清楚为什么它应该适用于除零以外的所有情况。
回答
所以我最终将代码更改如下,它工作正常并且应该是可移植的:
int shiftbit( unsigned val ) {
int bCount = bitcount(val);
return bCount ? (~0 << (( sizeof(int)*CHAR_BIT ) - bCount)) : 0;
}
【问题讨论】:
标签: c