1

与えられた:

#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)意味ですか?私は理解していません~

4

4 に答える 4

6

~の意味なら

m_dwMode &= (~dwMode); 

それはビットごとの否定です。唯一のオペランドのビットを反転します。m_dwMode式全体は、1がある正確な位置のビットをゼロにすることを意味しdwModeます。

~ を dwMode に適用すると、反転します。0 だったビットが 1 になり、その逆も同様です。結果は、m_dwMode でビットごとに AND 演算されます。ここで、1 ビットの AND は簡単な操作です。一方、ビットが 0 の AND は定数 0 を生成します。

コンテキストに応じて、操作はモード ビットの設定とクリアに使用されます。コード スニペットに多数のビット マスクが表示されます。MATCHLESS_MODE はビット 0、TRANSPARENT_MODE はビット 1 などです。したがって、SetMode() を使用して m_dwMode のそれぞれのビットを設定し、SetNotMode() を使用してそれらをクリアすることができます。これらの関数へのパラメーターは、XXX_MODE 定数の 1 つ、またはそれらのいくつかの OR の組み合わせになります。

于 2012-11-25T04:01:13.877 に答える
4

ビットごとの否定。

1001 == ~0110
于 2012-11-25T03:59:47.553 に答える
3

それはビット単位の補数です。入力値のすべてのビットが反転されます。

于 2012-11-25T04:00:09.877 に答える
3

~dwMode はビット単位の補数です。つまり、DWORD のすべてのビットが反転されます。

たとえば、00000000000000000000000000001010 は 1111111111111111111111111110101 になります。

したがって、操作全体で、dwMode に設定されている m_dwMode のビットがオフになります。

于 2012-11-25T04:02:28.760 に答える