实际中经常通过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
Tagged on:

发表评论