শর্তসাপেক্ষ XOR?


89

সি # এর কীভাবে শর্তসাপেক্ষ XORঅপারেটর নেই?

উদাহরণ:

true  xor false = true
true  xor true  = false
false xor false = false

15
!=বিকল্প হিসাবে কাজ কিভাবে ?
পাস্কাল কুয়াক

45
সি শার্প করে একটি XOR অপারেটর (এক্স ^ Y) আছে। আমি তাই প্রশ্নের ভিত্তি অস্বীকার করি। আপনি কী ব্যাখ্যা করতে পারেন যে আপনি কেন বিশ্বাস করেছিলেন যে সি # এর একটি জোর অপারেটর নেই? লোকেরা কেন সি # সম্পর্কে মিথ্যা জিনিস বিশ্বাস করে তা জানতে আগ্রহী।
এরিক লিপার্ট

4
@ এরিক লিপার্ট: আমি মনে করি তিনি লজিকাল অপারেটরগুলি ( & | ^) বনাম শর্তসাপেক্ষ অপারেটর ( && ||) উল্লেখ করছেন। কিন্তু আপনি অধিকার (অবশ্যই), একটি যৌক্তিক XOR হয় ... করছি
BoltClock

14
@ বোল্টক্লক: ওহ, যদি প্রশ্নটি হয় "কেন কোনও সংক্ষিপ্ত-সার্কিট জোর অপারেটর নেই?" - কিভাবে থাকতে পারে? "এবং" দিয়ে যদি প্রথম যুক্তিটি ভুল হয় তবে আপনাকে দ্বিতীয়টি মূল্যায়ন করতে হবে না। "বা" দিয়ে, যদি প্রথম যুক্তিটি সত্য হয় তবে আপনাকে দ্বিতীয়টি মূল্যায়ন করার দরকার নেই। আপনাকে সর্বদা জোরের জন্য উভয় যুক্তি মূল্যায়ন করতে হবে, সুতরাং কোনও সংক্ষিপ্ত সার্কিট সম্ভব নয়।
এরিক লিপার্ট

4
মাইক্রোসফ্টের কাছে প্রশ্নটি নিজেই উপযুক্ত - যৌক্তিক, কেবল "কেন সেখানে একটি এক্সওআর নেই"।
দ্য এভিল গ্রিবো

উত্তর:


124

সি # তে, শর্তসাপেক্ষ অপারেটরগুলি প্রয়োজন হলে কেবলমাত্র তাদের দ্বিতীয় অপারেন্ড চালায় ।

যেহেতু একটি এক্সওআর অবশ্যই উভয় মানকে সংজ্ঞা দ্বারা পরীক্ষা করে, তাই শর্তাধীন সংস্করণটি নির্বোধ।

উদাহরণ :

  • লজিকাল এবং: &- প্রতিবার উভয় পক্ষের পরীক্ষা করে।

  • যৌক্তিক OR: |- প্রতিবারই উভয় পক্ষের পরীক্ষা করুন।

  • শর্তাধীন এবং: &&- 1 ম দিকটি সত্য হলে কেবল দ্বিতীয় পক্ষের পরীক্ষা করে।

  • শর্তাধীন OR: ||- 1 ম দিকটি মিথ্যা হলে কেবল দ্বিতীয় পক্ষের পরীক্ষা করুন।


37
কোনও এক্সওআর অপারেটর কনভেনশন লঙ্ঘন করবে না "শর্তসাপেক্ষ অপারেটররা প্রয়োজনে কেবল তাদের গৌণ অপারেন্ড চালায়"। এটি কেবল সর্বদা প্রয়োজনীয় হবে।
নাথান কোভনার 21

4
শর্তসাপেক্ষে XOR কিছু নির্দিষ্ট নিদর্শনগুলির জন্য একটি দুর্দান্ত এবং মার্জিত শর্টকাট হতে পারে, যদিও এটি ভাষাতে অন্তর্ভুক্ত করার পক্ষে যথেষ্ট ন্যায়সঙ্গত কিনা তা নিশ্চিত নয়। এই জাতীয় নিদর্শনগুলির উদাহরণ যেখানে XOR দরকারী হিসাবে প্রমাণিত হতে পারে, তা হ'ল শর্তাধীন নেগেশন: যখন বুলিয়ান এক্সপ্রেশনকে তুচ্ছ করা উচিত বা না করা উচিত, তখন দ্বিতীয় বুলিয়ান অভিব্যক্তি দেওয়া হয়।
সালভাদোরগমেজ 22

4
কিছুক্ষণের মধ্যে এটির প্রতিক্রিয়া জানানো হয়নি তবে @ খায়দা হালদা-র জনপ্রিয় মন্তব্যের জবাব দেওয়ার জন্য: আপনি কখনও এমন কোনও কিছু কেন ব্যবহার করবেন যা আপনি জানেন যে কখনও ব্যবহার করা হবে না? আপনি ইচ্ছাকৃতভাবে ডেড কোড লিখবেন।
দ্য এভিল গ্রিবো

4
কীভাবে, কীভাবে, শর্তসাপেক্ষ XOR কখনও কার্যকর হতে পারে? শর্তসাপেক্ষ XOR কখনই উভয় পক্ষের তুলনা না করে মূল্যায়ন করতে পারে না যে তারা সমান বা না তা নির্ধারণ করতে। এমনকি দুটি বালের তুলনা করে শর্তযুক্ত XOR এর ধারণাটি এখনও প্রতিটি বুলের মান পরীক্ষা করে অবশ্যই সমতা পরীক্ষা করে।
দ্য এভিল গ্রিবো

4
এটি শর্তসাপেক্ষ সংযোজন অপারেটরের মতো নির্বোধ। শর্তসাপেক্ষ সংযোজনের জন্য কেন অন্য অপারেটর তৈরি করবেন না, যেখানে (a + b) কেবলমাত্র খ প্রয়োজন হলে খ কে মূল্যায়ন করে? শর্তসাপেক্ষ XOR এর মতো এটিও শর্তসাপেক্ষ অপারেটরদের কনভেনশন লঙ্ঘন করবে না, কেবল দ্বিতীয় যুক্তিটি সর্বদা প্রয়োজনীয় হবে। এর জন্য আর কোনও ব্যবহারের মামলা নেই। এবং আমি কেবল এই উদাহরণ দিয়ে পেডেন্টিক নই - এক্সওআর অপারেশনটি মূলত 1-বিট সংযোজন।
কেভিন হল্ট

283

প্রশ্নটি কিছুটা পুরানো তবে ...

এই অপারেটরের কীভাবে কাজ করা উচিত:

true xor false = true
true xor true = false
false xor true = true
false xor false = false

এইভাবে! = অপারেটর বুল ধরণের সাথে কাজ করে:

(true != false) // true
(true != true) // false
(false != true) // true
(false != false) // false

সুতরাং আপনি যেমন দেখতে পাচ্ছেন তেমনি ^^বিদ্যমানটিকে প্রতিস্থাপন করা যাবে!=


46
এটি আসলে একমাত্র উত্তর যা প্রশ্নকে সরাসরি এবং সঠিকভাবে সম্বোধন করে।
usr ডিরেক্টরির

40
আমি এখানে বসে নিজেকে মুখমন্ডল করে বসেছি যে আমি বুঝতে পারি নি যে এটির !=জন্য কাজ করবে।
আদমমসি 331

4
উত্তরটি সঠিক তবে মন্তব্যগুলি নেই। এটি প্রশ্নের সমাধান করে না, যা হ'ল "কেন সি # এর শর্তসাপেক্ষ XOR নেই?"। কড়া কথায় বলতে গেলে এটি কোনও লজিকাল অপারেটর নয়, এটি একটি সম্পর্কযুক্ত সমতা অপারেটর। ফলাফলটি XOR এর সমান হলেও এটি অন্য শ্রেণিতে রয়েছে। দুটি বুলিয়ান মান পরীক্ষা করার সময় এটি কেবল এক্সওআর এর সাথে তুলনা করে এবং অপারেটরের উভয় পক্ষের এখনও মূল্যায়ন করতে হবে।
দ্য এভিল গ্রিবো

4
@ দ্য এভিলগ্রিবো - আপনি যা বলছেন তা সত্য; the! = অপারেটর প্রযুক্তিগতভাবে শর্তযুক্ত XOR অপারেটর নয়। তবে, এই উত্তরটি কার্যকরভাবে বলেছে, "শর্তসাপেক্ষ XOR অপারেটরের উপস্থিতি নেই কারণ! = অপারেটর রয়েছে" " যেভাবেই হোক আমি এটি পড়ি।
সিন্ডোগ

6
আমি মনে করি প্রায় সবাই এই পোস্টটি শেষ পর্যন্ত আসলে বুলিয়ানদের উপর এক্সওআর লিখতে চেয়েছিল। যেমন এখানে যৌক্তিক ANDএবং ORতেমন কিছুই নেই XOR। বা কমপক্ষে আমরা বুঝতে পারি নি !=:) @ এভিলগ্রিবো
এম.কাজেম আখগারি

30

লজিকাল এক্সওআর অপারেটরটি রয়েছে: ^

ডকুমেন্টেশন: সি # অপারেটর এবং ^ অপারেটর


4
যৌক্তিক, শর্তযুক্ত নয়। যৌক্তিক এবং = &, শর্তসাপেক্ষ এবং = &&। তিনি কন্ডিশনাল সম্পর্কে জিজ্ঞাসা করছেন।
দ্য এভিল গ্রিবো

4
এটি বাইনারি, যৌক্তিক নয়। এটি ধরে নেওয়া হয় যে বুলগুলি হয় 0 বা 1 যা সিএলআর-তে সত্য নয়।
usr

4
দুঃখিত, এই উত্তরটি আসলে শর্তাধীন অপারেটরদের সম্পর্কে প্রশ্নের উত্তর দেয় না। এটি কিছুটা
বিরোধী

4
রেকর্ডের জন্য, এই উত্তরে লিঙ্কযুক্ত ডকুমেন্টেশনগুলি পরিষ্কারভাবে বলেছে যে ^বুলিয়ান অপারেন্ডসের সাথে ব্যবহার করা হলে এটি একটি বুলিয়ান অপারেটর। "বুল অপারেন্ডসের জন্য, ^ অপারেটর অসমতার অপারেটরের মতো একই ফলাফলের গণনা করে! ="। আপনি বিটওয়াইস-এক্সওর পূর্ণসংখ্যার সাথে অপারেশন করতে পারেন ^। সি # সি নয়
15ee8f99-57ff-4f92-890c-b56153

25

কেবল একটি স্পষ্টকরণ হিসাবে, ^ অপারেটর উভয়ই অবিচ্ছেদ্য ধরণের এবং বুলের সাথে কাজ করে।

দেখুন দুটিই MSDN এর ^ অপারেটর (গ # রেফারেন্স) :

বাইনারি ^ অপারেটরগুলি ইন্টিগ্রাল টাইপ এবং বুলের জন্য পূর্বনির্ধারিত। অবিচ্ছেদ্য ধরণের জন্য, its এর অপারেশনগুলির বিটওয়াইজ একচেটিয়া-OR গণনা করে। বুল অপারেন্ডসের জন্য, its লজিকাল একচেটিয়াভাবে গণনা করে - বা এর অপারেশনগুলির; এটি হ'ল, ফলাফলটি সত্য এবং যদি কেবল তার অপারেশনগুলির মধ্যে একটি সত্য হয়।

এই প্রশ্নটি যখন জিজ্ঞাসা করা হয়েছিল তখন থেকেই ডকুমেন্টেশনটি পরিবর্তিত হয়েছে।


4
সি # তে দীর্ঘদিন ধরে প্রোগ্রামিং করছিল, এটি কখনই জানত না! ধন্যবাদ @ রিচার্ডসিএল!
নাথান ট্রেগিলাস

এটি ভাল তথ্য তবে মন্তব্য হিসাবে মন্তব্য হিসাবে সম্পাদনা করা বা অন্য উত্তরে এটি সম্পাদন করা আরও উপযুক্ত বলে মনে ^হয় যা পাঁচ বছরের মধ্যে এটির উল্লেখ ও পূর্বাভাস দেয়। আমার সন্দেহ হয় কিছু বদলে গেছে।
ক্রিস

13

মার্ক এল দ্বারা জিজ্ঞাসা করা হিসাবে , এখানে সঠিক সংস্করণ:

 Func<bool, bool, bool> XOR = (X,Y) => ((!X) && Y) || (X && (!Y));

সত্যের টেবিলটি এখানে:

 X | Y | Result
 ==============
 0 | 0 | 0
 1 | 0 | 1
 0 | 1 | 1
 1 | 1 | 0

তথ্যসূত্র: এক্সক্লুসিভ ওআর


4
প্রশ্নটি জিজ্ঞাসা করা হয়েছিল যে কেন সি # এর শর্তাধীন XOR অপারেটর নেই। এটি প্রশ্নের উত্তর দেয় না। ফাংশনটি নিজেই: এই ফাংশনটি শর্তসাপেক্ষ XOR হিসাবে কাজ করে - তবে প্রশ্নটি হ'ল এটি কি শর্তহীন XOR এর চেয়ে বেশি দক্ষ? একচেটিয়া সত্যের জন্য পরীক্ষা করার জন্য, এক্সওরকে অবশ্যই নিশ্চিত করতে হবে যে একটি এবং ঠিক একটি ফলাফল সত্য। এর অর্থ উভয় পক্ষকে অবশ্যই মূল্যায়ন এবং তুলনা করতে হবে। উপরের ফাংশনটি সর্বনিম্ন একটি মানকে উল্টানোর সময় একটি এবং শর্তের উভয় দিক পরীক্ষা করে। এটি কি আমরা অভ্যন্তরীণভাবে জানি যদি এটি এক্সওআরের চেয়ে আলাদা কিছু হয়?
দ্য এভিল গ্রিবো 31'17

6

ওহ হ্যাঁ, এটা করে

bool b1 = true;
bool b2 = false;
bool XOR = b1 ^ b2;

4
এটি একটি বাইনারি অপারেটর, যৌক্তিক নয়। এটি ধরে নেওয়া হয় যে বুলগুলি হয় 0 বা 1 যা সিএলআর-তে সত্য নয়। সুতরাং এই কোডটি আসলে কাজ করতে ব্যর্থ হতে পারে।
usr ডিরেক্টরির

6
@ ইউএসআর, সি # তে, দুটি বুলিয়ান অপারেন্ড প্রয়োগ করা হলে ^ অপারেটরটি যৌক্তিক is আপনি এই উত্তরের মাধ্যমে একটি ভয়াবহ মন্তব্য করেছেন, আপনি কি কখনও নিজের অনুমানটি পরীক্ষা করার জন্য কোনও কোড চালিয়েছেন?
মার্ক এল।

4
@ মার্কল আমি করেছি: পেস্টবিন.com / ইউ v ভ্যাকপএন G জি প্রিন্টস সত্য, যদিও সত্য ^ সত্যকে মিথ্যা বলে মনে করা হয়। bool, হয় না সবসময় 0 বা 1. সমান এটা CLR উপর একটি লজিক্যাল প্রকার নয়। এটি একটি 8 বিট পরিমাণ যথেচ্ছ বিষয়বস্তু সহ। আমি বিষয়টিও প্রদর্শনের জন্য যাচাইযোগ্য আইএল তৈরি করতে পারতাম।
usr ডিরেক্টরির

4
উদাহরণস্বরূপ সি # এর চেয়ে অন্যান্য সিএলআর ভাষা ব্যবহার করার সময়। আমি পুনরায় বলছি: আমি সম্পূর্ণরূপে যাচাইযোগ্য, নিরাপদ সমাবেশ তৈরি করতে ILASM ব্যবহার করতে পারতাম যা এটি করে (আইএল স্তরে বুলিয়ান মান যেমন i1একটি বাইট হয় ঠিক তেমন)। এটি 100% সংজ্ঞায়িত এবং নিরাপদ পরিচালিত আচরণ। সিএলআর রাগড আপ হয় না ;; মাইক্রোসফ্ট পেক্স ব্যবহার করার সময় এই আচরণটি প্রথম দেখলাম।
usr

4
@ এডপ্লুনকেট, আপনার ট্রাক আমার সাথে আছে বলে আমি মনে করি না। usr দেখিয়েছে যে অভ্যন্তরীণভাবে এটি আসলে বাইনারি অপারেটর। আমি যে "দুর্ব্যবহার" সম্পর্কে অভিযোগ করেছিলাম তা হ'ল উপায়গুলি যার মাধ্যমে তিনি এটি প্রমাণ করেছিলেন, যা আমি এখনও বজায় রেখেছি তা খুব চতুর। এটি ঘটতে পারে, তবে কোনওভাবেই বুলিয়ান ব্যবহার কোনও লোকের জমিতে রাখেনি যে এটিকে সিএলআর-সেফ হিসাবে স্থাপন করা সবচেয়ে খারাপ, আপত্তিজনক (যদি দূষিত না হয়) সবচেয়ে খারাপ হবে এবং এটি একটি ত্রুটি হিসাবে বিবেচিত হবে। যা ইউএসআর প্রমাণ করে তা হ'ল অভ্যন্তরীণভাবে সি # আমাদের দুজনেরই তুলনায় সি-এর মতো বেশি। এটি করে এমন কোডটি বৈধ হিসাবে বিবেচিত হওয়া উচিত কিনা তা অন্য প্রশ্ন।
মার্ক এল।

4

শর্তসাপেক্ষ xor অস্তিত্বহীন, তবে আপনি যৌক্তিক একটি ব্যবহার করতে পারেন কারণ জোর বুলিয়ানদের জন্য সংজ্ঞায়িত করা হয়, এবং সমস্ত শর্তসাপেক্ষ তুলনাগুলি বুলিয়ানদের কাছে মূল্যায়ন করে।

সুতরাং আপনি যেমন কিছু বলতে পারেন:

if ( (a == b) ^ (c == d))
{

}

এটি একটি বাইনারি অপারেটর, যৌক্তিক নয়। এটি ধরে নেওয়া হয় যে বুলগুলি হয় 0 বা 1 যা সিএলআর-তে সত্য নয়। সুতরাং এই কোডটি আসলে কাজ করতে ব্যর্থ হতে পারে।
usr ডিরেক্টরির

@ আপনি কি সিএলআর বলতে চাইছেন? এটি আমার পক্ষে কাজ করেছে, এটি নিশ্চিত নয় যে আমি এখানে কোন প্রান্তের মামলাটি মিস করেছি কিনা ...
লুনা কোডগর্ল

4
আপনি সম্ভবত ক্ষেত্রে যে কোনো অ-মিথ্যা বুলিয়ান উপস্থাপনা পূর্ণসংখ্যা নাও থাকতে পারে সম্পর্কে চিন্তা করা হয় নি @Spencevail 1। এটি একটি সামান্য পরিচিত ঘটনা। আপনি এমন পরিস্থিতিতে শেষ করতে পারেন যেখানে দুটি অ-ভুয়া বুলিয়ানগুলির জোর এখনও অ-মিথ্যা! যা এই নির্দিষ্ট কোডটিতে বলেছে যে জোর অপারেটরটি কেবল কখনও [0,1] এর মানগুলিতে প্রয়োগ হয় যাতে আমার মন্তব্যটি (পুরোপুরি) প্রয়োগ না হয়।
usr ডিরেক্টরির

4
@ স্পেনসভেল ঠিক তেমন ক্ষেত্রে ব্যর্থ হতে পারে। একটি নিরাপদ পরিচালিত কোড ফাংশন ক্রিয়েটবুল (বাইট) তৈরি করা সম্ভব যা কোনও বাইটকে একই বিটের একটি বিলে রূপান্তর করে। তারপরে, ক্রিয়েটবুল (1) ^ ক্রিয়েটবুল (2) সত্য, তবে ক্রিয়েটবুল (1) সত্য এবং ক্রিয়েটবুল (2 )ও সত্য! &দুর্বলও।
usr ডিরেক্টরির

4
প্রকৃতপক্ষে, আমি কেবল একটি রিউজিআইটি বাগটি রিপোর্ট করেছি কারণ তারা এই সম্ভাবনাটিকে বিবেচনা করে না এবং এটি সংকলিত বলে মনে করে সংকলিত &&হয় &
usr

3

লজিকাল এক্সওর অপারেটর থাকাকালীন শর্তযুক্ত^ কোনও জোর অপারেটর নেই। আপনি নিম্নলিখিতটি ব্যবহার করে দুটি এবং A এর মান শর্তসাপেক্ষ জোর অর্জন করতে পারেন:

A ? (!B) : B

পেরেনগুলি প্রয়োজনীয় নয়, তবে আমি তাদের পরিষ্কার করার জন্য যুক্ত করেছি।

দ্য এভিল গ্রিবো দ্বারা নির্দেশিত হিসাবে, এটি উভয় অভিব্যক্তিকে মূল্যায়ন করে, তবে xor এবং এবং বা এর মতো সংক্ষিপ্তভাবে প্রচার করা যায় না ।


লজিকান ^ এবং শর্তসাপেক্ষ between এর মধ্যে পার্থক্য কী? ও
আর্মেন ​​সিরুনিয়ান

@ আর্মেন ​​সিরুনিয়ান লজিকাল অপারেটররা এমন ধরণের বিটওয়াইজ অপারেশন করেন যেখানে শর্তসাপেক্ষ অপারেটররা বুলিয়ান মানগুলিতে কাজ করে এবং বুলিয়ান ফলাফল দেয়। বুলিয়ান মানগুলি বিবেচনা করে: 0101 ^ 0011এর মান রয়েছে 0110
জিম্রিড

4
না, আপনি সম্পূর্ণ ভুল। সি # তে উভয় প্রকারের এক্সওআর রয়েছে (এগুলিকে যথাক্রমে বিটওয়াইজ এবং লজিকাল বলা হয়)। উভয়ই ^ চিহ্ন ব্যবহার করে।
আর্মেন ​​সিরুনিয়ান


0

শর্তসাপেক্ষ (শর্ট সার্কিট) এক্সওআর বলে কোনও জিনিস নেই। শর্তসাপেক্ষ অপারেটরগুলি কেবল তখনই অর্থবহ হয় যখন কেবলমাত্র প্রথম যুক্তির দিকে তাকানোর মাধ্যমে চূড়ান্ত ফলাফলটি নিশ্চিতভাবে বলার উপায় থাকে tell এক্সওআর (এবং সংযোজন) এর জন্য সর্বদা দুটি যুক্তি প্রয়োজন, সুতরাং প্রথম যুক্তির পরে শর্ট সার্কিটের কোনও উপায় নেই।

আপনি যদি A = সত্য জানেন, তবে (A XOR B) =! বি।

আপনি যদি এ = মিথ্যা জানেন, তবে (এ এক্সওর বি) = বি

উভয় ক্ষেত্রে, আপনি যদি A না তবে B না জানেন তবে আপনি যথেষ্ট পরিমাণে জানেন না (A XOR B)। উত্তরটি গণনা করতে আপনাকে অবশ্যই সর্বদা A এবং B উভয়ের মান শিখতে হবে। আক্ষরিকভাবে কোনও ব্যবহারের কেস নেই যেখানে আপনি উভয় মান ছাড়াই XOR সমাধান করতে পারেন resolve

মনে রাখবেন, সংজ্ঞা অনুসারে XOR এর চারটি মামলা রয়েছে:

false xor true  = true
true  xor false = true
true  xor true  = false
false xor false = false

আবার, আশা করি উপরের দিক থেকে এটি সুস্পষ্ট যে প্রথম মানটি জানা দ্বিতীয় উত্তরটি না জেনেও উত্তর পাওয়ার পক্ষে যথেষ্ট নয়। তবে, আপনার প্রশ্নে, আপনি প্রথম কেসটি বাদ দিয়েছেন। আপনি যদি পরিবর্তে চেয়েছিলেন

false op true  = false (or DontCare)
true  op false = true
true  op true  = false
false op false = false

তাহলে আপনি একটি শর্ট সার্কিট শর্তসাপেক্ষ অপারেশন দ্বারা এটি পেতে পারেন:

A && !B

তবে এটি কোনও এক্সওআর নয়।


আমি এই উত্তরে এমন কোনও কিছুই দেখছি না যা উপরে কমপক্ষে একটি উত্তরে নেই। আপনার শর্ট-সার্কিটযোগ্য আন-এক্সোরটি ওপি যা খুঁজছিল তা আমি কোনও ইঙ্গিত দেখতে পাচ্ছি না, যেহেতু তিনি একটি উত্তর গ্রহণ করেছিলেন যা ধরে নিয়েছে যে তিনি উপযুক্ত জোর চান।
15ee8f99-57ff-4f92-890c-b56153

আমার এখন পর্যন্ত আক্ষরিকভাবে একমাত্র উত্তর যা দ্বিতীয় যুক্তির মূল্যায়ন না করেই ওপির অনুরোধ করা সত্য টেবিল তৈরি করতে পারে।
কেভিন হল্ট

এছাড়াও ওপি জিজ্ঞাসা করেছিল যে কেন শর্তাধীন XOR নেই, এবং উপরের উত্তরগুলি সঠিকভাবে বলেছে যে এটি XOR এর দুটি যুক্তি প্রয়োজন কারণ, উপরের উত্তরগুলি সঠিকভাবে ব্যাখ্যা করতে পারে বলে মনে হয় নি যে XOR আসলে দুটি যুক্তি প্রয়োজন কেন। স্পষ্টতই আপনি অন্যথায় বোধ করেন তবে আমার কাছে এই পৃষ্ঠার বিভিন্ন মন্তব্য থেকে স্পষ্ট হয়েছিল যে এক্সওর এর প্রাথমিক দ্বি-যুক্তি এখনও সম্পূর্ণ শিক্ষানবিশকে পুরোপুরি ব্যাখ্যা করা হয়নি।
কেভিন হল্ট

4
আপনি আমার সাথে কথা বলেছেন।
15ee8f99-57ff-4f92-890c-b56153

@ কেভিন হোল্ট - লজিকাল এক্সওআর অর্থবহ হয় যদি আপনার শর্তগুলির একটিতে সত্য হওয়ার প্রয়োজন তবে উভয়ই না। আপনাকে উভয় শর্তের মূল্যায়ন করতে হবে তাতে কিছু আসে যায় না। শর্ট সার্কিট জিনিস হ'ল একটি নিম্ন স্তরের বিশদ যা আপনাকে কেবল পারফরম্যান্সের সমালোচনামূলক কোড (নিয়ন্ত্রণ প্রবাহ ধীর গতির) সাথে ডিল করার সময় চিন্তা করতে হবে। এর বাইরে কোনও যৌক্তিক অপারেটর তৈরি করার সময় আমি 'এক্সক্লুসিভ বা' কী বোঝাতে চাইবে সে সম্পর্কে আমি আরও উদ্বিগ্ন। যথা, এটি বিটওয়াইজ সংস্করণটির মতো চালিত করুন (অন্যান্য অপারেটরগুলির মতো), বা এটি একটি বা এটি একচেটিয়া করুন (যতগুলি শর্ত আপনি চান তবে কেবল একটি সত্য হতে পারে)।
থোরহাম

-3

এই প্রশ্নের স্নেহপূর্বক উত্তর দেওয়া হয়েছে, তবে আমি একটি ভিন্ন পরিস্থিতি জুড়ে এসেছি। এটি সত্য যে শর্তাধীন XOR এর দরকার নেই। এটিও সত্য যে ^ অপারেটরটি ব্যবহার করা যেতে পারে। তবে, যদি আপনাকে কেবল অপারেন্ডগুলির "সত্য || মিথ্যা" স্থিতি পরীক্ষা করতে হয় তবে ^ সমস্যা দেখা দিতে পারে। উদাহরণ স্বরূপ:

void Turn(int left, int right)
{
    if (left ^ right)
    {
        //success... turn the car left or right...
    }
    else
    {
        //error... no turn or both left AND right are set...
    }
}

এই উদাহরণে, যদি বামটি 10 ​​(0xa) এ সেট করা থাকে এবং ডানটি 5 (0x5) এ সেট করা হয় তবে "সাফল্য" শাখা প্রবেশ করা হবে। এর জন্য (নির্বোধের সরল যদি উদাহরণস্বরূপ) উদাহরণস্বরূপ, এর ফলে বাগটি হবে কারণ আপনার একই সাথে বাম এবং ডানদিকে ঘুরিয়ে দেওয়া উচিত নয়। আমি প্রশ্নকর্তার কাছ থেকে যা সংগ্রহ করেছি তা হ'ল তিনি আসলে একটি শর্তসাপেক্ষ চেয়েছিলেন, তবে জোরকে যাবার সাথে সাথে মানগুলিতে সত্য / মিথ্যা সম্পাদন করার একটি সহজ উপায়।

একটি ম্যাক্রো কৌশলটি করতে পারে:

#define my_xor(a, b) ( ((a)?1:0) ^ ((b)?1:0) )

যদি আমি চিহ্ন থেকে দূরে থাকি তবে আমাকে চারপাশে চড় মারতে হবে: o)

আমি এটি পোস্ট করার পরে নীচে জিম্রিডের উত্তরটি পড়েছি (খারাপ ইয়াপডগ!) এবং তার আসলেই সহজ। এটি কার্যকর হবে এবং আমি কেন তার উত্তরটি বাতিল হয়ে গেল তা সম্পর্কে একেবারেই ধারণা নেই ...


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