অগ্রাধিকার এবং বিটমাস্ক অপারেশন


94

আমি খুব অদ্ভুত একটি ঘটনাটি দেখতে পেয়েছি।

নম্বর 2 ( 0b10) নিন এবং এটি 1 ( 0b01) দিয়ে বিটমাস্ক করুন

এটি উত্পাদন করতে হবে 0b00যা 0 এর সমান।

যাইহোক, মিঃ শ্রাইডিনগার এখানে আসেন এখানে:

var_dump(0b10 & 0b01); // int(0)
var_dump(0b10 & 0b01 == 0); // int(0)
var_dump(0b10 & 0b01 != 0); // int(0)

হুইস্কি ট্যাঙ্গো ফক্সট্রোট।

আমি স্বীকার করছি, বিটওয়াইজ অপারেটরগুলির কথাটি যখন তীব্র হয় না - তাই সম্ভবত আমি কোথাও ভয়াবহভাবে ভয়াবহভাবে ভুল পেয়েছি?

তবে পাইথনে:

0b10 & 0b01 == 0 = True

0b10 & 0b01 != 0 = False

... তাই?


আমি পিএইচপি তে নেই তবে সি, সি ++ এ আপনি কেবল লিখতে পারেনvar_dump(!(0b10 & 0b01))
গ্রিজেশ চৌহান

4
যদিও অদ্ভুত কিছু: পার্সার বাগের কারণে কিছু সংস্করণে এটি 0b0+1মূল্যায়ন করে 2
লিলি চুং

উত্তর:


150

আপনি আসলে এটি করছেন:

var_dump(0b10 & (0b01 == 0));
var_dump(0b10 & (0b01 != 0));

চেষ্টা করুন:

var_dump((0b10 & 0b01) == 0);
var_dump((0b10 & 0b01) != 0);

6
আমার কাছে মনে হয় পিএইচপি সামগ্রিকভাবে স্ট্রেনজ অপারেটর রয়েছে।
অ্যালভিন ওয়াং

23
আমার ধারণা, সে কারণেই আমি কোনও ভাষায় প্রাধান্যের উপর নির্ভর করি না । তদুপরি, আমি মনে করি বন্ধনীগুলি কোডটি আরও পঠনযোগ্য করে তোলে। চরম ক্ষেত্রে আপনি গ্রুপ এবং সংক্ষিপ্ত-মন্তব্য স্টাফ করতে চান (পুনরায়)।
উত্তর নেই

4
আপনি ঠিক আছেন! আমি মনে করি খুব কমই কোনও কোডের শর্তাধীন ভাবের প্রয়োজন যেমন 0b10 & (0b01 == 0)হ্যাঁ কোনও ধরণের তথ্যের সাথেই কেউ বিটওয়াইজ প্রয়োগ করবে।
গ্রিজেশ চৌহান

4
ভাল, আরও সাধারণ উদাহরণ বিবেচনা করুন: টের্নারি অপারেটর, পিএইচপি এর পিছনের দিকে রয়েছে, এটি অন্য সমস্ত ভাষার চেয়ে আলাদা করে তোলে। রেফ: পিএসপিএসনেস
অ্যালভিন ওয়াং

5
সি এবং সি ++ এ থাকা লোকদের এই বিষয়গুলির জন্য কেন সতর্কতা রয়েছে তা ঠিক।
প্লাজমাএইচএইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.