操作员〜在这里是什么?

Vin*_*rta 1 c++

鉴于:

#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; }
};
Run Code Online (Sandbox Code Playgroud)

这部分m_dwMode &= (~dwMode)意味着什么?我不明白~

Sev*_*yev 6

如果你的意思是~in

m_dwMode &= (~dwMode); 
Run Code Online (Sandbox Code Playgroud)

然后它是按位否定.它反转其唯一操作数的位.整个表达式意味着 - 将具有一个m_dwMode位置的位完全归零dwMode.

当你将〜应用于dwMode时,它被反转 - 零的位变为1,反之亦然.然后使用m_dwMode对结果进行按位与运算.现在,AND与一位是一个简单的操作.另一方面,与零位相反,产生一个常数零.

给定上下文,该操作用于设置和清除模式位.我在代码片段中看到一堆位掩码 - MATCHLESS_MODE只是位0,TRANSPARENT_MODE是位1,依此类推.因此,您可以使用SetMode()来设置m_dwMode和SetNotMode()中的相应位以清除它们.这些函数的参数将是XXX_MODE常量之一,或者是其中几个常量的OR组合.