পর্ব - ২ ( সমস্যা - ২ )

একটি Number এর বাইনারি Representation এর i'তম বিটটি 0 না 1 ?

N & ( 1 << i ) এই Operation এর মাধ্যমেই আমরা আমাদের Answer পেয়ে যাবো ।

এখন প্রশ্ন হল , এই Operation টি কেন কাজ করছে ?

ভালো করে খেয়াল করলেই আমরা এর উত্তর পেয়ে যাবো । আমরা জানি যে , বাইনারি Representation এ ডান থেকে বামে প্রতি বিট ধরে যাওয়া মানেই হল প্রতি ঘরে 2 এর Power 1 করে বাড়া ।

এখন ধরা যাক , N এর মান 10 ( {1010}) । এর 2nd বিটটি আমরা বের করতে চাই ।
এক্ষেত্রে Operation টি হবে N & ( 1 << 2 ) । ( 1 << 2 ) মানে 1 কে 2 ঘর বামে shift করছি । তাহলে ( 1 << 2 ) এর মান হবে {100}অর্থাৎ 4 ।
  • তারপর N এর সাথে একে & করলে ঃ  {1010}{0100}2 = 0 ।
যেহেতু Number টির সাথে আমরা 2 এর i'তম Power কে & করছি সেহেতু i'তম বিটটি 1 হলেই কেবল N & ( 1 << 2 ) এর মান 2i হবে অন্যথায় 0 হবে , কারণ ( 1 << i ) এর i'তম বিটটি ছাড়া ডানের সব বিটই 0 ।

এইধরনের আরো দুটি Operation রয়েছে ঃ
  1. একটি Number এর বাইনারি Representation এর i'তম বিটটি On করা অর্থাৎ 1 করা । ( N |= ( 1<< i )) ।
  2. একটি Number এর বাইনারি Representation এর i'তম বিটটি Off করা অর্থাৎ 0 করা । ( N &= ~(1<<i )) ।

কোড ইমপ্লিমেন্টেশন ঃ



0 comments: (+add yours?)