• 【C++】位操作的应用


    // test.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <Windows.h>
    #include <iostream>
    using namespace std;
    
    #define MAX_ACHIEVE_DATA_SIZE 256   					//成就的最大的BYTE数量
    char m_achieveFinishState[MAX_ACHIEVE_DATA_SIZE];       //成就的完成状态和领取奖励的状态
    
    void SetAchieveFinished(INT_PTR nAchieveId)
    {
    	INT_PTR  nBytePos = nAchieveId >> 2;		//第多少个BYTE
    	INT_PTR  nBitPos = (nAchieveId &3) << 1;    //一个BYTE里的第几个Bit
    	m_achieveFinishState[nBytePos] |= (BYTE)(1 << nBitPos) ;
    }
    bool IsAchieveFinished(INT_PTR nAchieveId)
    {
    	INT_PTR  nBytePos = nAchieveId >> 2;		//第多少个BYTE
    	INT_PTR  nBitPos = (nAchieveId & 3) << 1 ;  //一个BYTE里的第几个Bit
    	if( m_achieveFinishState[nBytePos] & (BYTE)(1 << nBitPos) )
    	{
    		return true;
    	}
    	return false;
    }
    //是否已经领取过成就的奖励了
    inline bool IsAchieveGiveAwards(INT_PTR nAchieveId)
    {
    	INT_PTR  nBytePos = nAchieveId >> 2; //第多少个BYTE
    	INT_PTR  nBitPos = ((nAchieveId &3) << 1) +1;  //一个BYTE里的第几个Bit
    	if( m_achieveFinishState[nBytePos] & (BYTE)(1 << nBitPos) )
    	{
    		return true;
    	}
    	return false;
    }
    //设置已经领取过成就的奖励了
    inline bool SetAchieveGiveAwards(INT_PTR nAchieveId)
    {
    	INT_PTR  nBytePos = nAchieveId >> 2;			//第多少个BYTE
    	INT_PTR  nBitPos = ((nAchieveId &3) <<1) +1;	//一个BYTE里的第几个Bit
    	m_achieveFinishState[nBytePos] |=  (BYTE)( 1 << nBitPos );
    	return true;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int nAchieveId = 1;
    	SetAchieveFinished( nAchieveId);
    	SetAchieveGiveAwards(nAchieveId);
    	cout<<IsAchieveFinished(nAchieveId)<<endl;
    	cout<<IsAchieveGiveAwards(nAchieveId)<<endl;
    	nAchieveId = 2;
    	cout<<IsAchieveFinished(nAchieveId)<<endl;
    	cout<<IsAchieveFinished(nAchieveId)<<endl;
    	system("pause");
    	return 0;
    }
    
    


     

  • 相关阅读:
    凤凰架构-读书笔记
    《团队协作的五大障碍》笔记
    MongoDB基本操作命令一
    NBI可视化集成clickhouse,实现百亿级数据分析能力
    AI文本与图像数据集荟萃
    gitLab内网部署
    git管理子模块
    git基础使用
    linux内核数据结构之链表-再实现
    win10下安装linux子系统
  • 原文地址:https://www.cnblogs.com/byfei/p/6389674.html
Copyright © 2020-2023  润新知