c++ 函数以按位或方式传入多个参数,然后在函数内分解出参数选项

本文有待更正,请参看另一篇C++笔记- 枚举类型与按位与或_qq_43058397的博客-CSDN博客

char占用8个二进制位,以按位或的方式可一次最多传入8个不同参数。int占用32个二进制位,最多可传入32个不同参数。这里以int为例。

进制在线转换进制转换 - 在线工具

用法简要说明一下:

因为要以按位或的方式进行unsigned int传参,所以把32个0中的任意一个设为1,就可得到一个Options项,一共可得到32个。

如下图,把倒数第四位设为1就可得到示例中常量OPTIONS_FOUR的16进制unsigned int值8。

该示例创建于QT平台,如若是其它平台,需要替换QString qstr = QString::number(op,2); int len = qstr.length();这两行代码中QString字符串类型以及number()函数和length()函数,两个函数的作用分别是:将int转换为二进制字符串、得到字符串长度。

示例源码:

#include <iostream>

using namespace std;
using Options = const unsigned int;//Options 选项
Options OPTIONS_ONE = 0x00000001;//32 表示int所占用的二进制位(int占用4字节共32位)中的第32位为1, 其余全为0, 以下类同。
Options OPTIONS_TWO = 0x00000002;//31
Options OPTIONS_THREE = 0x00000004;//30
Options OPTIONS_FOUR = 0x00000008;//29
//Options类型最多可创建32项
//每项所对应的16进制的unsigned int值可利用在线转换工具从二进制转16进制得到

void CinOptions(Options op)//按位或选项分解 代入条目最高支持32个
{
    QString qstr = QString::number(op,2);
    int len = qstr.length();
    for(int i = len - 1, j = 0; i >= 0 ; i--,j++)
    {
        if(qstr[i] == '1')
        {
            switch (32 - j) {
            case 32:
                cout <<  "Options one." << endl;
                break;
            case 31:
                cout <<  "Options two." << endl;
                break;
            case 30:
                cout <<  "Options three." << endl;
                break;
            case 29:
                cout <<  "Options four." << endl;
                break;
            default:
                break;
            }
        }
    }
}

void main()
{
    cout << "The \"OPTIONS_THREE\" is" << endl;
    CinOptions(OPTIONS_THREE);
    cout << endl;
    cout << "The \"OPTIONS_TWO | OPTIONS_FOUR\" is" << endl;
    CinOptions(OPTIONS_TWO | OPTIONS_FOUR);
    cout << endl;
    cout << "The \"OPTIONS_ONE | OPTIONS_TWO | OPTIONS_THREE | OPTIONS_FOUR\" is" << endl;
    CinOptions(OPTIONS_ONE | OPTIONS_TWO | OPTIONS_THREE | OPTIONS_FOUR);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值