一般来说,我们如果需要写包含多种情况的代码,一般采用switch case语句,根据控制表达式的值,可以把程序流跳转到多个语句中的一个执行。
但这个语句一般用于只需一种情况满足,当你想选中多种case的时候,会比较复杂,比如你想衡量多个变量的状况,switch就不是特别适合。
最近新学到了一个办法,感觉非常好用,分享给大家。
首先在相应的头文件(.h文件)定义 const 常量。
//xxx.h文件 const unit32_t metric0 = 0x00000001; const unit32_t metric1 = 0x00000002; const unit32_t metric2 = 0x00000004; const unit32_t metric3 = 0x00000008; const unit32_t metric4 = 0x00000010; const unit32_t metric5 = 0x00000020;
首先, unit32_t代表32位无符号数,32位是二进制的32位,以0x00000001为例,0x代表十六进制数,所以二进制的32位可以用8位十六进制数表示(不懂这里可以搜一下16进制与二进制的转换方法),可以看到上面每一个十六进制数目扩展成二进制数目只有一个位置是1,其他位置都是0(有点类似于one-hot编码)这就可以为后面使用按位与打下基础。
具体使用和实现
includevoid fn (unit32_t m) { if(m & metric1) { ...; } if(m & metric2) { ...; } if(m & metric3) { ...; } if(m & metric4) { ...; } if(m & metric5) { ...; } } int main() { //衡量第一个指标 fn(metric1); //衡量第三个指标 fn(metric3); //同时衡量第1,3个指标 fn(metric1 | metric3); return 0; }
这里需要注意两个 *** 作&和 |,分别是按位与和按位或,即每一位进行与、惑 *** 作,这样比较简单方便。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)