实际中经常通过bit的 0 或者 1 来控制系统状态,可能就需要个专门用来控制bit的工具类,下面就分享个。
例如:
m_dwRuleIndex = 0;
FvMask::Add(m_dwRuleIndex, _MASK_(1)); //第一个bit位置改为1
FvMask::Del(m_dwRuleIndex, _MASK_(1)); //第一个bit位置改为0
FvMask::HasAny(m_dwRuleIndex, _MASK_(1)); //判断第一个bit位置是否为1
#pragma once namespace FvMask { template<typename TFlag, typename TMask> bool HasAny(const TFlag flag, const TMask mask) { return ((flag&mask) != 0); } template<typename TFlag, typename TMask> bool HasAll(const TFlag flag, const TMask mask) { return ((flag&mask) == mask); } template<typename TFlag, typename TMask> void Add(TFlag& flag, const TMask mask) { flag |= mask; } template<typename TFlag, typename TMask> void Del(TFlag& flag, const TMask mask) { flag &= ~ mask; } template<typename TFlag, typename TMask> TFlag Remove(const TFlag flag, const TMask mask) { return (flag & (~ mask)); } template<typename TFlag, typename TMask> TFlag IsAdd(const TFlag oldFlag, const TFlag newFlag, const TMask mask) { return (((oldFlag&mask) == 0) && ((newFlag&mask) != 0)); } template<typename TFlag, typename TMask> TFlag IsDel(const TFlag oldFlag, const TFlag newFlag, const TMask mask) { return (((oldFlag&mask) != 0) && ((newFlag&mask) == 0)); } } #ifndef _MASK_ #define _MASK_(flag) (0X01 << (flag)) #endif
C语言的bit位控制工具FvMask