如何使用C程序根据不同的长度值设置掩码
How to set the mask based on the different values of lengths using C program
在一个函数中,我必须传递位长,并根据位长设置掩码。例如,这是我的程序部分
if(length == 8)
mask = 0xff;
if(length == 7)
mask = 0x7f;
if(length == 12)
mask = 0x3ff;
if(length == 16)
mask = 0xffff;
当长度从 1 到 16 不等时,如何使用一些循环语句来设置掩码?
如果有人帮忙就太好了,在此先感谢。
从零开始。然后对于掩码中的每一位,左移 1,然后在末尾 OR 1 位。
uint16_t mask = 0;
for (int i = 0; i < length; i++) {
mask <<= 1;
mask |= 1;
}
您可以按照以下方式进行操作:
uint16_t mask = 0;
for (size_t i = 0; i < length; i++)
mask |= (1 << i);
对于循环的每次迭代,您或 |
您的 mask
向左移动 i
个位置。
How to set the mask based on the different values of lengths using C program?
将 1u 移动 n
,然后减去 1。不需要循环。最好使用 unsigned 类型并防止带有掩码的大型 length
以确保没有 undefined behavior (UB).
#define UINT_WIDTH 32
unsigned length = foo();
unsigned mask = (1u << (length & (UINT_WIDTH - 1)) - 1u;
How can I use some loop statements to set the mask as the length varies from 1 to 16?
这适用于 [1 ... UINT_WIDTH]
。
如果使用像 uint16_t
这样的固定宽度类型,则将 ..._WIDTH
掩码设置为 16。
对于可移植代码,UINT_WIDTH
需要与unsigned
保持一致。
#include <limits.h>
#if UINT_MAX == 0xFFFF
#define UINT_WIDTH 16
#elif UINT_MAX == 0xFFFFFFFF
#define UINT_WIDTH 32
#elif UINT_MAX == 0xFFFFFFFFFFFFFFFF
#define UINT_WIDTH 64
#else
// Very rare
#error TBD code
#endif
在一个函数中,我必须传递位长,并根据位长设置掩码。例如,这是我的程序部分
if(length == 8)
mask = 0xff;
if(length == 7)
mask = 0x7f;
if(length == 12)
mask = 0x3ff;
if(length == 16)
mask = 0xffff;
当长度从 1 到 16 不等时,如何使用一些循环语句来设置掩码? 如果有人帮忙就太好了,在此先感谢。
从零开始。然后对于掩码中的每一位,左移 1,然后在末尾 OR 1 位。
uint16_t mask = 0;
for (int i = 0; i < length; i++) {
mask <<= 1;
mask |= 1;
}
您可以按照以下方式进行操作:
uint16_t mask = 0;
for (size_t i = 0; i < length; i++)
mask |= (1 << i);
对于循环的每次迭代,您或 |
您的 mask
向左移动 i
个位置。
How to set the mask based on the different values of lengths using C program?
将 1u 移动 n
,然后减去 1。不需要循环。最好使用 unsigned 类型并防止带有掩码的大型 length
以确保没有 undefined behavior (UB).
#define UINT_WIDTH 32
unsigned length = foo();
unsigned mask = (1u << (length & (UINT_WIDTH - 1)) - 1u;
How can I use some loop statements to set the mask as the length varies from 1 to 16?
这适用于 [1 ... UINT_WIDTH]
。
如果使用像 uint16_t
这样的固定宽度类型,则将 ..._WIDTH
掩码设置为 16。
对于可移植代码,UINT_WIDTH
需要与unsigned
保持一致。
#include <limits.h>
#if UINT_MAX == 0xFFFF
#define UINT_WIDTH 16
#elif UINT_MAX == 0xFFFFFFFF
#define UINT_WIDTH 32
#elif UINT_MAX == 0xFFFFFFFFFFFFFFFF
#define UINT_WIDTH 64
#else
// Very rare
#error TBD code
#endif