একটি পরিবর্তনশীল রয়েছে যা কিছু পতাকা ধারণ করে এবং আমি সেগুলির একটি অপসারণ করতে চাই। তবে আমি কীভাবে এটি সরিয়ে ফেলতে জানি না।
এখানে আমি পতাকাটি সেট করি।
my.emask |= ENABLE_SHOOT;
একটি পরিবর্তনশীল রয়েছে যা কিছু পতাকা ধারণ করে এবং আমি সেগুলির একটি অপসারণ করতে চাই। তবে আমি কীভাবে এটি সরিয়ে ফেলতে জানি না।
এখানে আমি পতাকাটি সেট করি।
my.emask |= ENABLE_SHOOT;
উত্তর:
সংক্ষিপ্ত উত্তর
আপনি যে পতাকাটি আনসেট করতে চান তা বিটওয়াইস নট অপারেশন দিয়ে আপনি বর্তমান মানটিতে একটি বিটওয়াস এবং অপারেশন করতে চান । একটি বিটওয়াইস প্রতিটি বিট উল্টায় না (যেমন 0 => 1, 1 => 0)।
flags = flags & ~MASK;
বা flags &= ~MASK;
।
দীর্ঘ উত্তর
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
আপনি যখন একটি বিটওয়াস এবং বিটওয়াইসের সাথে মানটি সেট না করে মান নির্ধারণ করেন When
value = value & ~ENABLE_SHOOT // 00000001
আপনি আসলে করছেন:
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);
কয়েকটি পতাকা সাফ করতে:
my.emask &= ~(ENABLE_SHOOT|SOME_OTHER|ONE_MORE);
এটি লক্ষণীয় গুরুত্বপূর্ণ যে ভেরিয়েবলটি ম্যানিপুলেটেড হচ্ছে কোন int এর চেয়ে বড় হলে 'এবং না' এক্সপ্রেশনটিতে ব্যবহৃত মানটিও অবশ্যই হওয়া উচিত। প্রকৃতপক্ষে, কেউ কখনও কখনও ছোট প্রকারগুলি ব্যবহার করে পালিয়ে যেতে পারে তবে পর্যাপ্ত বিজোড় মামলা রয়েছে যে ধ্রুবকগুলি যথেষ্ট বড় কিনা তা নিশ্চিত করার জন্য টাইপ প্রত্যয় ব্যবহার করা ভাল।
flags -= flags & MY_FLAG;
(বা ^=
যদি আপনি পছন্দ করেন)।