বুলিয়ান না, বিট না
সংক্ষেপে, আপনার অধ্যাপকের সমাধানটি আরও ভাল (তবে তবুও ভুল, কঠোরভাবে বলা, আরও নীচে দেখুন) কারণ এটি বিটওয়াইস অপারেটরগুলির পরিবর্তে বুলিয়ান অপারেটরগুলি ব্যবহার করে এবং বুলিয়ানদের পূর্ণসংখ্যার হিসাবে বিবেচনা করে। c==1
"গ সত্য সত্য" উপস্থাপনের অভিব্যক্তিটি ভুল কারণ কারণ সি যদি একটি সংখ্যা হতে পারে (বর্ণিত অ্যাসাইনমেন্ট অনুসারে) তবে গ এর কোনও শূন্য মানকে উপস্থাপন হিসাবে বিবেচনা করা উচিত true
।
বুলিয়ানদের তুলনা না করা কেন এটি নিরাপদ থাকা সত্ত্বেও 0 বা 1 এর সাথে তুলনা না করাই ভাল এই প্রশ্নটি দেখুন ।
ব্যবহার না করার একটি খুব ভাল কারণ xor
হ'ল এটি বিট-ওয়াইজ এক্সক্লুসিভ বা অপারেশন। এটি আপনার উদাহরণে কাজ করার কারণ ঘটেছে কারণ বাম হাত এবং ডান হাত উভয়ই বুলিয়ান এক্সপ্রেশন যা 1 বা 0 এ রূপান্তর করে (আবার দেখুন 1 )।
বুলিয়ান একচেটিয়া-বা বাস্তবে !=
।
ভাবটি ভেঙে দেওয়া
আপনার অধ্যাপকের সমাধানটি আরও ভালভাবে বুঝতে, বুলিয়ান অপারেটরদের তাদের "বিকল্প টোকেন" সমতুল্য সঙ্গে প্রতিস্থাপন করা সবচেয়ে সহজ, এটি এটিকে আরও ভাল redable (imho) এবং সম্পূর্ণ সমতুল্য সি ++ কোডে রূপান্তরিত করে: 'এর জন্য নয়' ব্যবহার করে! ' এবং 'এবং' 'এবং' এর জন্য আপনি পাবেন
(not a and not b) != c
দুর্ভাগ্যক্রমে, exclusive_or
অন্য কোনও লজিকাল অপারেটর নেই not_eq
, যা এই ক্ষেত্রে সহায়ক নয়।
যদি আমরা প্রাকৃতিক ভাষার প্রকাশটি ভেঙে ফেলি:
হয় ক এবং খ উভয়ই মিথ্যা বা সি সত্য, তবে উভয়ই নয়।
প্রথমে বুলিয়ান প্রস্তাব এবং এ এবং বি সম্পর্কে বাক্যটিতে:
হয় এ বা বি, তবে উভয়ই নয়।
এটি অনুবাদ করে A != B
(কেবল বুলিয়ানদের জন্য, কোনও ধরণের A এবং B এর জন্য নয়)
তখন প্রস্তাব ছিল এ
a এবং b উভয়ই মিথ্যা
যা হিসাবে বলা যেতে পারে
ক মিথ্যা এবং খ মিথ্যা
যা অনুবাদ করে (not a and not b)
এবং শেষ পর্যন্ত
সি সত্য
যা কেবল অনুবাদ করে c
। তাদের সংযুক্ত করে আপনি আবার পাবেন (not a and not b) != c
।
তারপরে এই অভিব্যক্তিটি কীভাবে কাজ করে তা আরও বিশদের জন্য আমি অন্যরা তাদের উত্তরে যে সত্য সারণীগুলি দিয়েছি তা স্থগিত করি।
তুমি দুজনেই ভুল
এবং যদি আমি নীটপিক করতে পারি: মূল অ্যাসাইনমেন্টে বলা হয়েছে যে ক, বি এবং সি অ-নেতিবাচক সংখ্যা হতে পারে, তবে নির্বিঘ্নে জানায়নি যে তারা যদি সংখ্যা হয় তবে তাদের মান 0 এবং 1 এর মধ্যে সীমাবদ্ধ করা উচিত যদি কোনও সংখ্যা থাকে তবে true
প্রথাগত হিসাবে 0 টি প্রতিনিধিত্ব করে না , তবে নিম্নলিখিত কোডটি একটি আশ্চর্যজনক উত্তর দেবে :
auto c = 2; // "true" in some way
auto a = 0; // "false"
auto b = 0; // "false"
std::cout << ((!a && !b) != c);
// this will output: 1 (!)
// fix by making sure that != compares booleans:
std::cout << ((!a && !b) != (bool)c);
a == b or c
পরিবর্তে অনুবাদ করাa == b or a ==c
। সমস্যাটি হ'ল কথ্য