二进制标志 - MetaTrader 5 库
您可以使用二进制标志来最小化函数签名中的 bool 参数。
例如,MQL int 大小为 32 位,因此您可以将 32 1/0 参数打包到单个 int 标志变量中。
空白功能(布尔值标志1,布尔值标志2,布尔值标志3,布尔值标志4,布尔值标志5,布尔值标志6,布尔值标志7,布尔值标志8,...标志N);
后:
空白功能(整数标志);
BinFlags 可以使用任何整数数据类型进行初始化:char、bool、short、int、color、long、datetime。
您的最大标志长度会有所不同:1 字节 = 8 位,2 字节 = 16 位,等等。
标志代表一个数字,该数字在任何位置都只有一个“1”位。
这些数字有1、2、4、8、16、32等。你明白了。
大量此类数字在十六进制中看起来更好:0x1、0x2、0x4、0x8、0x10、0x20 等。
这个类使用遵循规则的标志。
BinFlags 必须首先初始化。您可以稍后使用 Write 覆盖内部标志。
您可以检查、设置、重置任意数量的标志。
多个标志应以“|”分隔。
模板<类型名>班级BinFlags {民众: BinFlags():mflags(无效的) {} BinFlags(T 标志):mflags(标志) {} 空白 写(T 标志) {mflags=flags;} T Read() {返回mflags;} 布尔值 Chk(T 标志) {返回(mflags&(flags))==flags;} 空白 设置(T标志){mflags|=(标志);} 空白 Rst(T 标志) {mflags&=~(flags);} 细绳 格式();受保护的: 整数 位() {整数我=0;为了(我;我<大小(T)*8;我+=4){如果(mflags<(整数)战俘(2,我)) {休息;}}返回(一)?一:1;} T mflags; };
为了方便起见,可以枚举标志名称。
BinFalgs 用法示例。
空白 启动时() { BinFlags<整数>bf(A|B); //初始化并写入 /*操纵*/ 打印(bf.Format()); //0011(2 个标志打开) 打印(“一个:”,bf.Chk(A)); //答:真 打印(“广告:”,bf.Chk(A|D)); //广告:假 bf.Set(C|D); //设置C和D 打印(bf.Format()); //1111(所有标志打开) bf.Rst(A); //重置A 打印(“BCD:”,bf.Chk(B|C|D)); //BCD码:真 打印(bf.Format()); //1110(降一旗) }
输出:
/**
BinFlags:0011
答:正确
广告:假
BinFlags:1111
BCD:真
BinFlags:1110
/**/
附件下载
📎 binflags.mq5 (2.13 KB)
📎 binflags.mqh (1.94 KB)
Source: MQL5 #29480
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
