点击上方公众号名称关注,获得更多内容
✎ 编 者 悟 语只要你认为还没有结束,就还是能去做些什么的,也许在做了之后,你才会发现这样一次次的做其实无关多少,只是为了求一个心的平衡。
文 章 导 读
今天给大家介绍了下掩码数组,这里只是做了一个小的代码测试,大家可以根据这个思路去扩展,以增强自己代码的可读性,希望对小伙伴们有所帮助哈,!
1什么是掩码数组1)通俗定义
掩码数组说白了很简单,此数组是由操作的位为1其他位为0的数按照一定顺序组织的数组。
2)掩码数组的特点
首先,它是有顺序性的,从低位(第1位)到指定的高位(第n位)。
其次,掩码就是屏蔽掉不需要的位,即此数的二进制形式只有一个位为1,其他的位都为0。
3)掩码数组举例
32位的掩码数组如下所示。
/* 32位掩码数组 */
unsigned int MaskArray[] = {0x00000000, // 用于占位,解决数组起始下标为0的问题,也可以在与时清零各个位
0x00000001, // 位1
0x00000002, // 位2
0x00000004, // 位3
0x00000008, // 位4
0x00000010, // 位5
0x00000020, // 位6
0x00000040, // 位7
0x00000080, // 位8
0x00000100, // 位9
0x00000200, // 位10
0x00000400, // 位11
0x00000800, // 位12
0x00001000, // 位13
0x00002000, // 位14
0x00004000, // 位15
0x00008000, // 位16
0x00010000, // 位17
0x00020000, // 位18
0x00040000, // 位19
0x00080000, // 位20
0x00100000, // 位21
0x00200000, // 位22
0x00400000, // 位23
0x00800000, // 位24
0x01000000, // 位25
0x02000000, // 位26
0x04000000, // 位27
0x08000800, // 位28
0x10000000, // 位29
0x20000000, // 位30
0x40000000, // 位31
0x80000000 // 位32
};
此数组的成员个数是33个,这样定义是考虑到了数组下标为0的问题,将第一个数组成员设置为全0,可以用它做全屏蔽操作,其他的32位数组下标正好是1-32了,这因人而异,大家可以根据自己的喜好去组织。
2测试代码测试代码如下。
#include
#include
#define uint unsigned int
#define uchar unsigned char
/* 32位掩码数组 */
unsigned int MaskArray[] = {0x00000000, // 用于占位,解决数组起始下标为0的问题,也可以在与时清零各个位
0x00000001, // 位1
0x00000002, // 位2
0x00000004, // 位3
0x00000008, // 位4
0x00000010, // 位5
0x00000020, // 位6
0x00000040, // 位7
0x00000080, // 位8
0x00000100, // 位9
0x00000200, // 位10
0x00000400, // 位11
0x00000800, // 位12
0x00001000, // 位13
0x00002000, // 位14
0x00004000, // 位15
0x00008000, // 位16
0x00010000, // 位17
0x00020000, // 位18
0x00040000, // 位19
0x00080000, // 位20
0x00100000, // 位21
0x00200000, // 位22
0x00400000, // 位23
0x00800000, // 位24
0x01000000, // 位25
0x02000000, // 位26
0x04000000, // 位27
0x08000800, // 位28
0x10000000, // 位29
0x20000000, // 位30
0x40000000, // 位31
0x80000000 // 位32
};
/* 用枚举作为下标,与掩码数组相对应,也定义了33个成员 */
enum bitnum
{
BIT0,
BIT1,
BIT2,
BIT3,
BIT4,
BIT5,
BIT6,
BIT7,
BIT8,
BIT9,
BIT10,
BIT11,
BIT12,
BIT13,
BIT14,
BIT15,
BIT16,
BIT17,
BIT18,
BIT19,
BIT20,
BIT21,
BIT22,
BIT23,
BIT24,
BIT25,
BIT26,
BIT27,
BIT28,
BIT29,
BIT30,
BIT31,
BIT32
};
int main(int argc, char *argv[])
{
uint TestVal1 = 0;
uint TestVal2 = 1;
uint TestVal3 = (unsigned int)0xF; //1111
uint Val1 = 0xF;
uint Val2 = 0x0;
uint Val3 = 0xF;
// 1)掩码数组优势在操作个别位数
TestVal1 |= MaskArray[BIT2]; // 或上,置位操作
printf("\nTestVal1或上掩码值结果为:0x%08x\n",TestVal1);
TestVal2 &= MaskArray[BIT0]; // 与上,数据清零操作
printf("\nTestVal2与上掩码值结果为:0x%08x\n",TestVal2);
TestVal3 &= ~(1 << MaskArray[BIT1]); // 与上,清零指定位操作,将1111屏蔽掉位1, 1101
printf("\nTestVal3清零指定位结果为:0x%08x\n",TestVal3);
// 2)将位枚举也充分利用一下,既可以作为数组下标,也可以用于位操作
Val1 &= (1 < printf("\nVal1影响其他位的与操作结果为:0x%08x\n",Val1);
Val2 |= (1 < printf("\nVal2置位数据某一位结果为:0x%08x\n",Val2);
Val3 &= ~(1 < printf("\nVal3影响其他位的与操作结果为:0x%08x\n",Val3);
return 0;
}
运行结果如下图所示。
总结
今天给大家介绍了下32位掩码数组的使用,这里只是做了一个小的代码测试,大家可以根据这个思路去扩展,以增强自己代码的可读性,后面还会有C语言相关的内容,大家敬请期待哈,。
有问题可以后台留言交流,公众号18年后新申请的,文章后不支持留言功能的。
相关文章:
编程意识篇——用结构存储数据以减少函数二次调用,能替代return返回值吗
C代码实现16位和32位数据字节序转换
C语言中一个分号的奇迹(预处理、指针、结构体、内存分配)——一段暗藏玄机的代码
malloc为什么不能在函数体外给全局变量分配内存
宏分类的妙用(排版开始用模板)
用结构体和指针模拟配置芯片引脚输出高低电平
进化论——从函数指针到被结构封装的函数指针及参数的应用举例
专辑推荐:
Python技能专辑
C语言专辑
IDE调试专辑
软件推荐专辑
软实力专辑
Linux专辑
扫码关注我们
❖ Game Over!