বলুন যে আমার কাছে পতাকাগুলির একটি সেট রয়েছে, একটি uint16_t এ এনকোড করা আছে flags
। উদাহরণস্বরূপ AMAZING_FLAG = 0x02
,। এখন, আমি একটি ফাংশন আছে। এই ফাংশনটিতে আমি পতাকাটি পরিবর্তন করতে চাই কিনা তা যাচাই করা দরকার, কারণ যদি আমি এটি করতে চাই তবে আমার ফ্ল্যাশ লিখতে হবে। এবং যে ব্যয়বহুল। অতএব, আমি একটি চেক চাই যা flags & AMAZING_FLAG
সমান কিনা তা আমাকে বলে doSet
। এটি প্রথম ধারণা:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
বিবৃতিটি স্বজ্ঞাত নয়। আমার মনে হয় এর চেয়ে ভাল উপায় হওয়া উচিত, এরকম কিছু:
if ((flags & AMAZING_FLAG) != doSet){
}
তবে এটি আসলে কাজ করে না, true
সমান বলে মনে হয় 0x01
।
সুতরাং, একটি বুলিয়ান সঙ্গে কিছু তুলনা করার জন্য একটি ঝরঝরে উপায় আছে?
(flags & AMAZING_FLAG) && doSet
?