c c++ 函数内数组初值_用掩码数组和枚举增强C代码的可读性

点击上方公众号名称关注,获得更多内容

269ddbaf11a5af2a0df3880aca3b5e82.gif ✎ 编 者 悟 语

     只要你认为还没有结束,就还是能去做些什么的,也许在做了之后,你才会发现这样一次次的做其实无关多少,只是为了求一个心的平衡。

文 章 导 读

   今天给大家介绍了下掩码数组,这里只是做了一个小的代码测试,大家可以根据这个思路去扩展,以增强自己代码的可读性,希望对小伙伴们有所帮助哈,86a274c38aa8563857cc424b7bb55386.png

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;
}

    运行结果如下图所示。

0a442bfaae717c74b4724fbb2c151599.png

总结

    今天给大家介绍了下32位掩码数组的使用,这里只是做了一个小的代码测试,大家可以根据这个思路去扩展,以增强自己代码的可读性,后面还会有C语言相关的内容,大家敬请期待哈,c9638169ec840bdb0227f3bcb83e6d1b.png

    有问题可以后台留言交流,公众号18年后新申请的,文章后不支持留言功能的。

相关文章:

编程意识篇——用结构存储数据以减少函数二次调用,能替代return返回值吗

C代码实现16位和32位数据字节序转换

C语言中一个分号的奇迹(预处理、指针、结构体、内存分配)——一段暗藏玄机的代码

malloc为什么不能在函数体外给全局变量分配内存

宏分类的妙用(排版开始用模板)

用结构体和指针模拟配置芯片引脚输出高低电平

进化论——从函数指针到被结构封装的函数指针及参数的应用举例

专辑推荐:

Python技能专辑

C语言专辑

IDE调试专辑

软件推荐专辑

软实力专辑

Linux专辑

扫码关注我们

9d447eb829622e26f0aadacc6b16bb46.png

b417c064fc8aa2561e6fff820a4fdfa9.gif Game Over!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值