অন্যান্য উত্তরগুলি অপারেটরগুলির মধ্যে কার্যকরী পার্থক্যটি coveringাকতে একটি ভাল কাজ করেছে, তবে উত্তরগুলি বর্তমানে অস্তিত্বের প্রতিটি সি-প্রাপ্ত ভাষার জন্য প্রযোজ্য হতে পারে। প্রশ্নটি সঙ্গে ট্যাগ করা হয়জাভা, এবং তাই আমি জাভা ভাষার জন্য বিশেষভাবে এবং প্রযুক্তিগতভাবে উত্তর দেওয়ার চেষ্টা করব।
&এবং |হয় ইন্টিজার বিটওয়াইজ অপারেটর বা বুলিয়ান লজিকাল অপারেটর হতে পারে। বিটওয়াইস এবং লজিকাল অপারেটরগুলির জন্য সিনট্যাক্স ( .215.22 ):
AndExpression:
EqualityExpression
AndExpression & EqualityExpression
ExclusiveOrExpression:
AndExpression
ExclusiveOrExpression ^ AndExpression
InclusiveOrExpression:
ExclusiveOrExpression
InclusiveOrExpression | ExclusiveOrExpression
সিনট্যাক্স জন্য EqualityExpressionসংজ্ঞায়িত করা হয় §15.21 , যা প্রয়োজন RelationalExpressionসংজ্ঞায়িত §15.20 , যেটা ঘুরে ফিরে প্রয়োজন ShiftExpressionএবং ReferenceTypeসংজ্ঞায়িত §15.19 এবং §4.3 যথাক্রমে। .115.18 এ সংজ্ঞায়িত করা ShiftExpressionদরকার যা বুনিয়াদী গাণিতিক, অ্যানারি অপারেটর, ইত্যাদি সংজ্ঞায়িত করে ড্রিল অবিরত করে চলেছে , কোনও ধরণের প্রতিনিধিত্ব করার জন্য বিভিন্ন উপায়ে ড্রিল চালিয়ে যায় । (যদিও আদিম ধরনের অন্তর্ভুক্ত নয়, আদিম ধরনের সংজ্ঞা শেষ পর্যন্ত, প্রয়োজন বোধ করা হয় হিসাবে তারা একটি অ্যারের, যার জন্য মাত্রা টাইপ হতে পারে হয় একটি ।)AdditiveExpressionReferenceTypeReferenceTypeReferenceType
বিটওয়াইজ এবং লজিকাল অপারেটরগুলির নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- এই অপারেটরগুলির
&সর্বাধিক অগ্রাধিকার এবং |সর্বনিম্ন নজরে থাকার সাথে আলাদা নজির রয়েছে।
- এই অপারেটরগুলির প্রত্যেকটি সিন্ট্যাক্টিক্যালি বাম-অ্যাসোসিয়েটিভ (প্রতিটি গ্রুপ বাম থেকে ডান) রয়েছে।
- অপারেটর এক্সপ্রেশনগুলির কোনও পার্শ্ব প্রতিক্রিয়া না থাকলে প্রতিটি অপারেটর কমিটিকেটিভ।
- প্রতিটি অপারেটর সাহসী হয়।
- বিটওয়াইজ এবং লজিকাল অপারেটরগুলি দুটি সংখ্যার সংখ্যার প্রকার বা দুই ধরণের অপারেন্ডের তুলনা করতে ব্যবহৃত হতে পারে
boolean। অন্যান্য সমস্ত ক্ষেত্রে একটি সংকলন-সময় ত্রুটির ফলস্বরূপ।
কিনা অপারেটর একটি bitwise অপারেটর বা একটি লজিক্যাল অপারেটর হিসেবে কাজ করে পার্থক্য operands "একটি আদিম অবিচ্ছেদ্য টাইপ পরিবর্তনীয়" (কিনা উপর নির্ভর করে §4.2 ) অথবা তারা ধরনের হলে booleanবা Boolean( §5.1.8 )।
যদি অপারেন্ডগুলি অবিচ্ছেদ্য ধরণের হয় তবে উভয় অপারেন্ডে বাইনারি সংখ্যার প্রচার ( §5.6.2 ) সঞ্চালিত হয়, তাদের উভয়ই অপারেশনের জন্য longs বা ints হিসাবে ছেড়ে যায় । অপারেশনের ধরণটি (প্রচারিত) অপারেশনগুলির ধরণ হবে। এই মুহুর্তে, &বিটওয়াইস এবং অ্যান্ড ^বিটওয়াইজ এক্সক্লুসিভ হবে OR, এবং |বিটওয়াইস ইনক্লুসিভ ওআর হবে। ( .215.22.1 )
Operands হন booleanবা Boolean, operands আনবক্সিং রূপান্তর প্রয়োজনে (সাপেক্ষে হতে হবে §5.1.8 ), এবং অপারেশন ধরণ হতে হবে boolean। &ফলে হবে trueউভয় operands যদি true, ^পরিণাম ডেকে আনবে trueউভয় operands আলাদা, এবং |পরিণাম ডেকে আনবে trueযদি পারেন প্রতীক হয় true। ( .215.22.2 )
বিপরীতে, && "শর্তসাপেক্ষে এবং অপারেটর" ( §15.23 ) এবং ||এটি "শর্তসাপেক্ষ-বা অপারেটর" ( .215.24 )। তাদের বাক্য গঠনটি সংজ্ঞায়িত করা হয়:
ConditionalAndExpression:
InclusiveOrExpression
ConditionalAndExpression && InclusiveOrExpression
ConditionalOrExpression:
ConditionalAndExpression
ConditionalOrExpression || ConditionalAndExpression
&&এর মতো &, বাদে এটি কেবলমাত্র ডান অপরেন্ডকে মূল্যায়ন করে যদি বাম অপারেন্ড হয় true। ||এর মতো |, বাদে এটি কেবলমাত্র ডান অপরেন্ডকে মূল্যায়ন করে যদি বাম অপারেন্ড হয় false।
শর্তাধীন-এবং নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- শর্তসাপেক্ষে এবং অপারেটরটি সিন্ট্যাক্টিক্যালি বাম-অ্যাসোসিয়েটিভ (এটি বাম থেকে ডানকে গোষ্ঠী দেয়)।
- শর্তসাপেক্ষে এবং অপারেটর উভয় পার্শ্ব প্রতিক্রিয়া এবং ফলাফলের মান সম্মানের সাথে সম্পূর্ণরূপে সম্মিলিত। অর্থাৎ কোনো এক্সপ্রেশন জন্য
a, bএবং cমত প্রকাশের মূল্যায়ন ((a) && (b)) && (c)একই ফলাফল, একই পার্শ্ব প্রতিক্রিয়া, একই আদেশ ঘটছে মত প্রকাশের মূল্যায়ন হিসাবে উত্পাদন করে (a) && ((b) && (c))।
- শর্তসাপেক্ষ-এবং অপারেটর প্রত্যেকটি প্রতীক ধরনের হতে হবে
booleanবা Boolean, অথবা একটি কম্পাইল-টাইম এরর দেখা দেয়।
- শর্তসাপেক্ষে এবং প্রকাশের ধরণটি সর্বদা
boolean।
- রান টাইমে, বাম-হাতের ক্রিয়াকলাপটি প্রথমে মূল্যায়ন করা হয়; যদি ফলাফলটি টাইপ করে থাকে তবে
Booleanএটি আনবক্সিং রূপান্তর ( §5.1.8 ) সাপেক্ষে ।
- যদি ফলাফলটি মান হয়
falseতবে শর্তাধীন-ও প্রকাশের মান হয় falseএবং ডান হাতের অপারেন্ড এক্সপ্রেশনটির মূল্যায়ন হয় না।
- যদি বাম-হাতের ক্রিয়াকলাপের মান হয়
trueতবে ডান হাতের অভিব্যক্তিটি মূল্যায়ন করা হয়; যদি ফলাফলটি টাইপ করে থাকে তবে Booleanএটি আনবক্সিং রূপান্তর ( §5.1.8 ) সাপেক্ষে । ফলস্বরূপ মান শর্তসাপেক্ষে এবং ভাবের মান হয়ে যায়।
- সুতরাং,
&&যেমন একই ফলাফল নির্ণয় &উপর booleanoperands। এটি কেবলমাত্র ডান হাতের অপারেন্ড এক্সপ্রেশনটি সর্বদা পরিবর্তে শর্তসাপেক্ষে মূল্যায়ন করা হয় তার মধ্যে পৃথক।
শর্তাধীন-বা নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- শর্তসাপেক্ষে বা অপারেটরটি সিন্টেক্সিকভাবে বাম-সহযোগী হয় (এটি বাম থেকে ডানকে গোষ্ঠী দেয়)।
- শর্তসাপেক্ষে বা অপারেটর উভয় পার্শ্ব প্রতিক্রিয়া এবং ফলাফলের মানের ক্ষেত্রে সম্পূর্ণরূপে সম্মিলিত। অর্থাৎ কোনো এক্সপ্রেশন জন্য
a, bএবং cমত প্রকাশের মূল্যায়ন ((a) || (b)) || (c)একই ফলাফল, একই পার্শ্ব প্রতিক্রিয়া, একই আদেশ ঘটছে মত প্রকাশের মূল্যায়ন হিসাবে উত্পাদন করে (a) || ((b) || (c))।
- শর্তাধীন বা অপারেটর প্রত্যেকটি প্রতীক ধরনের হতে হবে
booleanবা Boolean, অথবা একটি কম্পাইল-টাইম এরর দেখা দেয়।
- একটি শর্তাধীন বা মত প্রকাশের টাইপ সর্বদা
boolean।
- রান টাইমে, বাম-হাতের ক্রিয়াকলাপটি প্রথমে মূল্যায়ন করা হয়; যদি ফলাফলটি টাইপ করে থাকে তবে
Booleanএটি আনবক্সিং রূপান্তর ( §5.1.8 ) সাপেক্ষে ।
- যদি ফলাফলটি মান হয়
trueতবে শর্তসাপেক্ষ-বা অভিব্যক্তির মান হয় trueএবং ডান হাতের অপারেন্ড এক্সপ্রেশনটির মূল্যায়ন হয় না।
- যদি বাম-হাতের ক্রিয়াকলাপের মান হয়
falseতবে ডান হাতের অভিব্যক্তিটি মূল্যায়ন করা হয়; যদি ফলাফলটি টাইপ করে থাকে তবে Booleanএটি আনবক্সিং রূপান্তর ( §5.1.8 ) সাপেক্ষে । ফলস্বরূপ মান শর্তসাপেক্ষ-বা ভাবের মান হয়ে যায়।
- সুতরাং, উপর বা অপারেশন
||হিসাবে একই ফলাফল গণনা । এটি কেবলমাত্র ডান হাতের অপারেন্ড এক্সপ্রেশনটি সর্বদা পরিবর্তে শর্তসাপেক্ষে মূল্যায়ন করা হয় তার মধ্যে পৃথক।|booleanBoolean
সংক্ষেপে বলতে গেলে, যেমন @JohnMeagher বারবার আউট মন্তব্যের উল্লেখ করেছে, &এবং |আসলে, অ শর্ট-সার্কিট operands হচ্ছে পারেন নির্দিষ্ট ক্ষেত্রে বুলিয়ান অপারেটরদের হয়, booleanবা Boolean। ভাল অনুশীলনের সাথে (যেমন: কোনও গৌণ প্রভাব নেই), এটি একটি সামান্য পার্থক্য। অপারেটরগুলি booleans বা Booleans না থাকলেও, অপারেটরগুলি খুব আলাদাভাবে আচরণ করে : বিটওয়াইজ এবং লজিকাল অপারেশনগুলি জাভা প্রোগ্রামিংয়ের উচ্চ স্তরে কেবল তুলনামূলকভাবে তুলনা করে না।