首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建32位位掩码的最有效方法

创建32位位掩码的最有效方法
EN

Stack Overflow用户
提问于 2015-10-15 18:03:37
回答 2查看 1.3K关注 0票数 0

我想创建一个掩码来设置第一个n nybbles的位,以及这些nybbles的第一个m位,其中n <=8m <=4

所谓高效,我指的是一种最小化按位运算的方法。

目前我使用蛮力的方法:首先创建一个若虫掩码,然后保持左移面具和ORing这些数字在一起。

以下是我目前的方法:

代码语言:javascript
复制
#define NIBBLE   ((unsigned int)0xF >> m))
#define MASK     ((NIBBLE | (NIBBLE << 4) |  (NIBBLE << (8)) | (NIBBLE << (12)) | (NIBBLE << (16)) | (NIBBLE << (20)) | (NIBBLE << (24)) | (NIBBLE << (28)))  >> (n*4) )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-15 19:24:44

您可以使用

代码语言:javascript
复制
(0x0f0f0f0f ^ (0xf0f0f0f0 >> m)) >> (4*n)
票数 5
EN

Stack Overflow用户

发布于 2015-10-15 19:22:05

代码语言:javascript
复制
/* Mask within nibble: 2**n - 1 */
int i;
unsigned int mask = 1;
for (i = 0; i < n; ++i) mask *= 2;
mask -= 1;
/* For all nibbles: multiply mask by 16 for each */
unsigned int nibblemask = 0;
for (i = 0; i < m; ++i) {
    nibblemask += mask;
    mask *= 16;
}

顺便说一句,按位操作有什么问题?他们更有效率。见福尔克·胡夫纳的答案..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33155466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档