অন্যান্য উত্তরগুলি অপারেটরগুলির মধ্যে কার্যকরী পার্থক্যটি 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
দরকার যা বুনিয়াদী গাণিতিক, অ্যানারি অপারেটর, ইত্যাদি সংজ্ঞায়িত করে ড্রিল অবিরত করে চলেছে , কোনও ধরণের প্রতিনিধিত্ব করার জন্য বিভিন্ন উপায়ে ড্রিল চালিয়ে যায় । (যদিও আদিম ধরনের অন্তর্ভুক্ত নয়, আদিম ধরনের সংজ্ঞা শেষ পর্যন্ত, প্রয়োজন বোধ করা হয় হিসাবে তারা একটি অ্যারের, যার জন্য মাত্রা টাইপ হতে পারে হয় একটি ।)AdditiveExpression
ReferenceType
ReferenceType
ReferenceType
বিটওয়াইজ এবং লজিকাল অপারেটরগুলির নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- এই অপারেটরগুলির
&
সর্বাধিক অগ্রাধিকার এবং |
সর্বনিম্ন নজরে থাকার সাথে আলাদা নজির রয়েছে।
- এই অপারেটরগুলির প্রত্যেকটি সিন্ট্যাক্টিক্যালি বাম-অ্যাসোসিয়েটিভ (প্রতিটি গ্রুপ বাম থেকে ডান) রয়েছে।
- অপারেটর এক্সপ্রেশনগুলির কোনও পার্শ্ব প্রতিক্রিয়া না থাকলে প্রতিটি অপারেটর কমিটিকেটিভ।
- প্রতিটি অপারেটর সাহসী হয়।
- বিটওয়াইজ এবং লজিকাল অপারেটরগুলি দুটি সংখ্যার সংখ্যার প্রকার বা দুই ধরণের অপারেন্ডের তুলনা করতে ব্যবহৃত হতে পারে
boolean
। অন্যান্য সমস্ত ক্ষেত্রে একটি সংকলন-সময় ত্রুটির ফলস্বরূপ।
কিনা অপারেটর একটি bitwise অপারেটর বা একটি লজিক্যাল অপারেটর হিসেবে কাজ করে পার্থক্য operands "একটি আদিম অবিচ্ছেদ্য টাইপ পরিবর্তনীয়" (কিনা উপর নির্ভর করে §4.2 ) অথবা তারা ধরনের হলে boolean
বা Boolean
( §5.1.8 )।
যদি অপারেন্ডগুলি অবিচ্ছেদ্য ধরণের হয় তবে উভয় অপারেন্ডে বাইনারি সংখ্যার প্রচার ( §5.6.2 ) সঞ্চালিত হয়, তাদের উভয়ই অপারেশনের জন্য long
s বা int
s হিসাবে ছেড়ে যায় । অপারেশনের ধরণটি (প্রচারিত) অপারেশনগুলির ধরণ হবে। এই মুহুর্তে, &
বিটওয়াইস এবং অ্যান্ড ^
বিটওয়াইজ এক্সক্লুসিভ হবে 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 ) সাপেক্ষে । ফলস্বরূপ মান শর্তসাপেক্ষে এবং ভাবের মান হয়ে যায়।
- সুতরাং,
&&
যেমন একই ফলাফল নির্ণয় &
উপর boolean
operands। এটি কেবলমাত্র ডান হাতের অপারেন্ড এক্সপ্রেশনটি সর্বদা পরিবর্তে শর্তসাপেক্ষে মূল্যায়ন করা হয় তার মধ্যে পৃথক।
শর্তাধীন-বা নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- শর্তসাপেক্ষে বা অপারেটরটি সিন্টেক্সিকভাবে বাম-সহযোগী হয় (এটি বাম থেকে ডানকে গোষ্ঠী দেয়)।
- শর্তসাপেক্ষে বা অপারেটর উভয় পার্শ্ব প্রতিক্রিয়া এবং ফলাফলের মানের ক্ষেত্রে সম্পূর্ণরূপে সম্মিলিত। অর্থাৎ কোনো এক্সপ্রেশন জন্য
a
, b
এবং c
মত প্রকাশের মূল্যায়ন ((a) || (b)) || (c)
একই ফলাফল, একই পার্শ্ব প্রতিক্রিয়া, একই আদেশ ঘটছে মত প্রকাশের মূল্যায়ন হিসাবে উত্পাদন করে (a) || ((b) || (c))
।
- শর্তাধীন বা অপারেটর প্রত্যেকটি প্রতীক ধরনের হতে হবে
boolean
বা Boolean
, অথবা একটি কম্পাইল-টাইম এরর দেখা দেয়।
- একটি শর্তাধীন বা মত প্রকাশের টাইপ সর্বদা
boolean
।
- রান টাইমে, বাম-হাতের ক্রিয়াকলাপটি প্রথমে মূল্যায়ন করা হয়; যদি ফলাফলটি টাইপ করে থাকে তবে
Boolean
এটি আনবক্সিং রূপান্তর ( §5.1.8 ) সাপেক্ষে ।
- যদি ফলাফলটি মান হয়
true
তবে শর্তসাপেক্ষ-বা অভিব্যক্তির মান হয় true
এবং ডান হাতের অপারেন্ড এক্সপ্রেশনটির মূল্যায়ন হয় না।
- যদি বাম-হাতের ক্রিয়াকলাপের মান হয়
false
তবে ডান হাতের অভিব্যক্তিটি মূল্যায়ন করা হয়; যদি ফলাফলটি টাইপ করে থাকে তবে Boolean
এটি আনবক্সিং রূপান্তর ( §5.1.8 ) সাপেক্ষে । ফলস্বরূপ মান শর্তসাপেক্ষ-বা ভাবের মান হয়ে যায়।
- সুতরাং, উপর বা অপারেশন
||
হিসাবে একই ফলাফল গণনা । এটি কেবলমাত্র ডান হাতের অপারেন্ড এক্সপ্রেশনটি সর্বদা পরিবর্তে শর্তসাপেক্ষে মূল্যায়ন করা হয় তার মধ্যে পৃথক।|
boolean
Boolean
সংক্ষেপে বলতে গেলে, যেমন @JohnMeagher বারবার আউট মন্তব্যের উল্লেখ করেছে, &
এবং |
আসলে, অ শর্ট-সার্কিট operands হচ্ছে পারেন নির্দিষ্ট ক্ষেত্রে বুলিয়ান অপারেটরদের হয়, boolean
বা Boolean
। ভাল অনুশীলনের সাথে (যেমন: কোনও গৌণ প্রভাব নেই), এটি একটি সামান্য পার্থক্য। অপারেটরগুলি boolean
s বা Boolean
s না থাকলেও, অপারেটরগুলি খুব আলাদাভাবে আচরণ করে : বিটওয়াইজ এবং লজিকাল অপারেশনগুলি জাভা প্রোগ্রামিংয়ের উচ্চ স্তরে কেবল তুলনামূলকভাবে তুলনা করে না।