我想从无符号长整数中得到n位。 我有这个无符号的功能,我真的不能把它放到unsigned long,经过这几个小时,请帮助我。
unsigned long getbits(unsigned long x, int p, int n){
return (x >> (p - n + 1)) & ~(~0 << n);
}
int main() {
printf("getbits(0x12341234abcdabcd, 31,4): 0x%016lu\n", getbits(0x12341234abcdabcd, 63, 40));
return 0;
}
输出为0x0000000000000171而不是0x0012341234abcdab
答案 0 :(得分:2)
您的代码中有2个错误:
getbits
中,您需要使用0UL
代替0
,~0
是0xFFFFFFFF
,但~0UL
是0xFFFFFFFFFFFFFFFFUL
。printf
来电中,您需要使用%016lx
代替%016lu
,答案 1 :(得分:1)
在此表达式中
(~0 << n)
值0
的类型为int
。
如果您想使用较大的类型,则需要
(~0ul << n)