Bazı bayrakları tutan bir değişken var ve bunlardan birini kaldırmak istiyorum. Ama nasıl kaldıracağımı bilmiyorum.
Bayrağı şu şekilde ayarladım.
my.emask |= ENABLE_SHOOT;
Bazı bayrakları tutan bir değişken var ve bunlardan birini kaldırmak istiyorum. Ama nasıl kaldıracağımı bilmiyorum.
Bayrağı şu şekilde ayarladım.
my.emask |= ENABLE_SHOOT;
Yanıtlar:
Kısa cevap
Ayarlamak istediğiniz bayrağın Bitwise NOT işlemi ile geçerli değer üzerinde Bitwise AND işlemi yapmak istiyorsunuz . A Bitwise NOT her biti ters çevirir (yani 0 => 1, 1 => 0).
flags = flags & ~MASK;
veya flags &= ~MASK;
.
Uzun cevap
ENABLE_WALK = 0 // 00000000
ENABLE_RUN = 1 // 00000001
ENABLE_SHOOT = 2 // 00000010
ENABLE_SHOOTRUN = 3 // 00000011
value = ENABLE_RUN // 00000001
value |= ENABLE_SHOOT // 00000011 or same as ENABLE_SHOOTRUN
Ayarlanmasını istediğiniz değerin Bitwise VE Bitwise NOT ile gerçekleştirilmesi.
value = value & ~ENABLE_SHOOT // 00000001
aslında yapıyorsun:
0 0 0 0 0 0 1 1 (current value)
& 1 1 1 1 1 1 0 1 (~ENABLE_SHOOT)
---------------
0 0 0 0 0 0 0 1 (result)
notification.sound ^= Notification.DEFAULT_SOUND;
my.emask &= ~(ENABLE_SHOOT);
birkaç bayrağı silmek için:
my.emask &= ~(ENABLE_SHOOT|SOME_OTHER|ONE_MORE);
Manipüle edilen değişken bir int'ten büyükse, 'değil' ifadesinde kullanılan değerin de olması gerektiğine dikkat etmek önemlidir. Aslında, bazen daha küçük tipler kullanmaktan kurtulabilir, ancak sabitlerin yeterince büyük olduğundan emin olmak için muhtemelen tür soneklerini kullanmanın en iyi olacağı tuhaf durumlar vardır.
flags -= flags & MY_FLAG;
(veya ^=
isterseniz).