বিটওয়াইজ অপারেটর (&, XOR, <<, ...) - ১

"হাই, অ্যামিগো!"

"বিটওয়াইজ অপারেটর সম্পর্কে আরও একটি ছোট পাঠ।"

"আপনি জানেন যে লজিক্যাল অপারেটর AND (&&), OR (||) এবং NOT (!) ছাড়াও বিটওয়াইজ অপারেটর রয়েছে AND (&), OR (|), NOT (~), এবং XOR(^ ), তাই না?"

"হ্যাঁ। বিলাবো একবার এই বিষয়ে খুব ভালো শিক্ষা দিয়েছিল।"

"ঠিক আছে, এই অপারেটরদের সম্পর্কে। আমি আপনাকে দুটি জিনিস বলতে চাই:"

"প্রথম, NOT (~) ব্যতীত, এগুলি লজিক্যাল অপারেটরের মতো বুলিয়ান ভেরিয়েবলগুলিতে প্রয়োগ করা যেতে পারে।"

"দ্বিতীয়, অলস মূল্যায়ন তাদের জন্য প্রযোজ্য নয়।"

"এই উদাহরণটি দেখুন:"

কোড সমতুল্য কোড
if (a != null && a.getName() != null && c != null)
{
 c.setName(a.getName());
}
if (a != null)
{
 if (a.getName() != null)
 {
  if (c != null)
  {
   c.setName(a.getName());
  }
 }
}

"বাম পাশ কি ডানের চেয়ে বেশি কম্প্যাক্ট?"

"হ্যাঁ।"

"এবং এর কি একই অর্থ আছে?"

"হ্যাঁ।"

"বেশ ঠিক। কিন্তু এখন বিটওয়াইজ অপারেটর ব্যবহার করে একই অভিব্যক্তি দেখুন :"

কোড সমতুল্য কোড
if (a != null & a.getName() != null & c != null)
{
 c.setName(a.getName());
}
boolean c1 = (a != null);
boolean c2 = (a.getName() != null);
boolean c3 = (c != null);
if (c1)
{
 if (c2)
 {
  if (c3)
  {
   c.setName(a.getName());
 }
 }
}

"অন্য কথায়, কোড একই, কিন্তু একেবারে প্রতিটি অপারেশন সঞ্চালিত হবে।"

"উল্লেখ্য যে a যদি শূন্য হয়, c2 গণনা করার সময় একটি ব্যতিক্রম নিক্ষেপ করা হবে!"

"আহ. আমি এখন আরও স্পষ্টভাবে দেখতে পাচ্ছি।"