zoukankan      html  css  js  c++  java
  • 【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;
    }
    
    


     

  • 相关阅读:
    Linux监控和安全运维 2.0 zabbix配置邮件告警
    Linux监控和安全运维 1.9 zabbix增加客户端监控
    linux系统构架
    给虚拟机添加eth1网络适配器(网卡)
    linux系统构架
    linux系统构架
    Linux系统构架
    VIM-Sed常用的一些记录。。。逐渐学习。。
    AIX用chsec命令修改快捷修改配置文件
    SYSLOG审记日志的配置。
  • 原文地址:https://www.cnblogs.com/byfei/p/6389674.html
Copyright © 2011-2022 走看看