gpt4 book ai didi

c - 奇怪的小错误

转载 作者:行者123 更新时间:2023-12-04 10:34:58 24 4
gpt4 key购买 nike

我有一个简单的功能:

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;
}

最佳答案

如果移位的位数大于或等于移位值中的位数,则移位操作的结果是未定义的。因此,将 32 位值移动 32 位并不能保证产生任何特别的结果。

关于c - 奇怪的小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5446281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com