假设:
#define MATCHLESS_MODE (DWORD)0x00000001 // 무적 상태
#define TRANSPARENT_MODE (DWORD)0x00000002 // 투명 상태
#define ONEKILL_MODE (DWORD)0x00000004 // 초필 상태
#define DONMOVE_MODE (DWORD)0x00000008 // 움직이지 못하는 상태
#define SAYTALK_MODE (DWORD)0x00000010 // 귓속말 못하는 상태
#define MATCHLESS2_MODE (DWORD)0x00000020 // 무적 상태2 (데미지는 입지만 죽지는 않는다.)
#define NO_ATTACK_MODE (DWORD)0x00000040 // 공격 못하는 상태
#define ITEM_MODE (DWORD)0x00000080 // 아이템 못버리고 못집는 모드
#define COMMUNITY_MODE (DWORD)0x00000100 // 길드, 파티, 친구, 개인간 거래, 개인상점 할수 없음
#define TALK_MODE (DWORD)0x00000200 // 일반 말 못하는 상태
#define SHOUTTALK_MODE (DWORD)0x00000400 // 외치기 못하는 상태
#define RECOVERCHAO_MODE (DWORD)0x00000800 // 카오 극복 모드
#define FREEPK_MODE (DWORD)0x00001000 // CTRL키 누름 없이 pk가능
#define PVPCONFIRM_MODE (DWORD)0x00002000 // PVP거절 상태
#define QUERYSETPLAYERNAME_MODE (DWORD)0x00004000 // 캐릭터 명 변경 가능 모드
#define MODE_MAILBOX (DWORD)0x00008000 // 읽지 않은 편지
class CFixedMode
{
private:
DWORD m_dwMode;
public:
CFixedMode()
{
m_dwMode = 0;
};
~CFixedMode(){};
void SetMode( DWORD dwMode ) { m_dwMode |= dwMode; }
void SetNotMode( DWORD dwMode ) { m_dwMode &= (~dwMode); }
BOOL IsMode( DWORD dwMode ) { return ( ( m_dwMode & dwMode ) == dwMode ) ? TRUE : FALSE; }
};
这部分m_dwMode &= (~dwMode)
的含义是什么?我不明白~
答案 0 :(得分:6)
如果你的意思是 然后它是按位否定。它反转其唯一操作数的位。整个表达式意味着 - 将 当你对dwMode应用〜时,它被反转 - 零的位变为1,反之亦然。然后使用m_dwMode对结果进行按位与运算。现在,AND与一位是一个简单的操作。另一方面,与零位相反,产生一个常数零。 给定上下文,该操作用于设置和清除模式位。我在代码片段中看到一堆位掩码 - MATCHLESS_MODE只是位0,TRANSPARENT_MODE是位1,依此类推。因此,您可以使用SetMode()来设置m_dwMode和SetNotMode()中的相应位以清除它们。这些函数的参数将是XXX_MODE常量之一,或者是其中几个常量的OR组合。m_dwMode &= (~dwMode);
m_dwMode
中的位置恰好归零dwMode
具有的位置。
答案 1 :(得分:4)
按位否定。
1001 == ~0110
答案 2 :(得分:3)
这是bitwise complement。翻转输入值的所有位。
答案 3 :(得分:3)
~dwMode是按位补码,这意味着DWORD中的每一位都被反转。
e.g。 00000000000000000000000000001010成为11111111111111111111111111110101,
所以整个操作会关闭m_dwMode中的位,这些位在dwMode中设置