C 不确定我是否理解如何创建位函数

C 不确定我是否理解如何创建位函数,c,bits,C,Bits,假设位数始终小于31且大于/0到0,如何创建一个函数来打开从参数1位置开始到参数2位置结束的所有位 我的理解:我假设它希望我返回从a和b中包含的位,然后关闭所有其他位。它是否会涉及一些声明,如: (1 << a) and include all the bits all the way to (1 << b)? (1您可以通过以下方式生成n位的掩码: mask = (1U << n) - 1; mask=(1U你想要一个纯粹假设的算法,不是针对任何语言

假设位数始终小于31且大于/0到0,如何创建一个函数来打开从参数1位置开始到参数2位置结束的所有位

我的理解:我假设它希望我返回从a和b中包含的位,然后关闭所有其他位。它是否会涉及一些声明,如:

(1 << a) and include all the bits all the way to (1 << b)?  

(1您可以通过以下方式生成
n
位的掩码:

mask = (1U << n) - 1;

mask=(1U你想要一个纯粹假设的算法,不是针对任何语言的吗?C是我正在使用的,但是任何算法都会有帮助。我刚刚编辑了我的理解。对不起,因为我是新手,“1U”是什么请参阅?@marchon,
U
使
1U
成为
无符号int
而不是从
1
常量中得到的
有符号int
。我包含它是为了避免未定义的行为(符号更改)如果
n
为31,则会出现这种情况。如果n不是31,则没有理由包含它。对吗?也没有理由不包含它。
无符号的
值通常在未定义的行为方面具有更好的特征。例如:结果1
int n = a - b + 1;
uint32_t mask = (1U << n) - 1;
uint32_t returnValue = mask << b;