অপারেটর ও এক্সপ্রেশন: গাণিতিক ও যৌক্তিক অপারেশন
সি প্রোগ্রামিং অপারেটর: অ্যারিথমেটিক, রিলেশনাল, লজিক্যাল, অ্যাসাইনমেন্ট ও ইউনারি অপারেটর। প্রিফিক্স ও পোস্টফিক্স ইনক্রিমেন্ট এবং অপারেটর প্রিসিডেন্স।
অপারেটর ও এক্সপ্রেশন: গাণিতিক ও যৌক্তিক অপারেশন
- অপারেটর ও এক্সপ্রেশন: গাণিতিক ও যৌক্তিক অপারেশন
- গণিত বনাম সি প্রোগ্রামিং: একটি ধাঁধাঁ
- অপারেটর ও অপারেন্ড কী?
- অপারেটরের প্রকারভেদ
- অ্যারিথমেটিক অপারেটর (Arithmetic Operators)
- ভাগের নিয়ম: পূর্ণসংখ্যা বনাম ভগ্নাংশ
- মডুলাস বা ভাগশেষ অপারেটর (%)
- রিলেশনাল অপারেটর (Relational Operators)
- সতর্কতা: '=' এবং '==' এক নয়!
- লজিক্যাল অপারেটর (Logical Operators)
- লজিক্যাল AND (&&) ও OR (||) এর ব্যবহার
- অ্যাসাইনমেন্ট অপারেটর ও শর্টহ্যান্ড
- ইনক্রিমেন্ট (++) ও ডিক্রিমেন্ট (--) অপারেটর
- প্রিফিক্স (++a) বনাম পোস্টফিক্স (a++)
- কন্ডিশনাল বা টার্নারি অপারেটর (? :)
- অপারেটর প্রিসিডেন্স (কার কাজ আগে?)
- সারসংক্ষেপ
অপারেটর ও এক্সপ্রেশন: সি প্রোগ্রামিংয়ের গাণিতিক ভিত্তি ও প্রয়োগ
সি প্রোগ্রামিং শেখার শুরুতে অনেকেই একটি সাধারণ গাণিতিক সমস্যা দেখে বিভ্রান্ত হয়: ৫ কে ২ দিয়ে ভাগ করলে উত্তর কেন ২.৫ না এসে ২ আসে? এটি কোনো ভুল নয়, বরং সি প্রোগ্রামিংয়ের অপারেটর (Operator) এবং ডেটা টাইপ (Data Type) এর একটি মৌলিক বৈশিষ্ট্য। প্রোগ্রামিংয়ে আমরা যখন কোনো গাণিতিক বা যৌক্তিক কাজ করি, তখন আমাদের নির্দিষ্ট কিছু চিহ্ন বা সিম্বল ব্যবহার করতে হয়। এই চিহ্নগুলোই হলো অপারেটর।
এইচএসসি আইসিটি এবং ভর্তি পরীক্ষার জন্য অপারেটর ও এক্সপ্রেশন অধ্যায়টি অত্যন্ত গুরুত্বপূর্ণ। এখান থেকে প্রতি বছরই এমসিকিউ (MCQ) এবং সৃজনশীল প্রশ্নে (CQ) উদ্দীপক থাকে। বিশেষ করে Increment/Decrement অপারেটর এবং Logical Operator-এর প্যাঁচানো প্রশ্নগুলো শিক্ষার্থীদের ভোগান্তি বাড়ায়। এই পাঠে আমরা অপারেটরের প্রতিটি খুঁটিনাটি বিষয়, বিশেষ করে পরীক্ষার জন্য জটিল টপিকগুলো সহজভাবে আলোচনা করব।
অপারেটর ও অপারেন্ড: প্রাথমিক ধারণা
প্রোগ্রামিংয়ে গাণিতিক কাজ করার জন্য দুটি জিনিসের প্রয়োজন হয়: ১. যার ওপর কাজ করা হবে (Data/Variable) এবং ২. যে কাজটি করবে (Symbol)।
সংজ্ঞা (Definition):
অপারেটর (Operator): অপারেটর হলো কতগুলো বিশেষ চিহ্ন বা সিম্বল (যেমন: +, -, *, /) যা কম্পাইলারকে নির্দিষ্ট গাণিতিক বা যৌক্তিক কাজ করার নির্দেশ দেয়।
অপারেন্ড (Operand): অপারেটর যার ওপর কাজ করে বা অপারেশন চালায়, তাকে অপারেন্ড বলে। যেমন: a + b এখানে + হলো অপারেটর এবং a, b হলো অপারেন্ড।
এক্সপ্রেশন (Expression): অপারেটর, অপারেন্ড এবং কনস্ট্যান্টের সমন্বয়ে গঠিত একটি বৈধ গাণিতিক বা যৌক্তিক বাক্য। যেমন: c = a + b - 5;
অপারেন্ডের সংখ্যার ওপর ভিত্তি করে অপারেটরকে প্রধানত তিন ভাগে ভাগ করা যায়:
১. ইউনারি (Unary): ১টি অপারেন্ড নিয়ে কাজ করে। (যেমন: ++, --, -)
২. বাইনারি (Binary): ২টি অপারেন্ড নিয়ে কাজ করে। (যেমন: +, -, *, /)
৩. টার্নারি (Ternary): ৩টি অপারেন্ড নিয়ে কাজ করে। (যেমন: ? :)
অ্যারিথমেটিক অপারেটর: পূর্ণসংখ্যা ও মডুলাসের সতর্কতা
সি ল্যাঙ্গুয়েজে সাধারণ যোগ, বিয়োগ, গুণ অনেকটা গণিতের মতোই। তবে ভাগ (/) এবং ভাগশেষ (%) নির্ণয়ের ক্ষেত্রে বিশেষ কিছু নিয়ম আছে যা এমসিকিউ-এর জন্য খুবই গুরুত্বপূর্ণ।

ইন্টিজার ডিভিশন (Integer Division)
প্রোগ্রামিংয়ে দুটি পূর্ণসংখ্যা (Integer) ভাগ করলে ফলাফল সবসময় পূর্ণসংখ্যাই আসবে, দশমিক অংশ বাদ যাবে। একে ইন্টিজার ডিভিশন বলে।
- 5 / 2 এর ফলাফল 2 (২.৫ নয়)।
- 5.0 / 2 এর ফলাফল 2.5 (কারণ একটি সংখ্যা ফ্লোটিং পয়েন্ট)।
মডুলাস অপারেটর (%)
ভাগশেষ বা Remainder বের করার জন্য মডুলাস অপারেটর ব্যবহৃত হয়। এটি Mod নামেও পরিচিত।
$$ a \% b = a - (\frac{a}{b} \times b) $$
(যেখানে ভাগফল পূর্ণসংখ্যায় নেওয়া হয়)
গুরুত্বপূর্ণ (Important):
- মডুলাস অপারেটর (%) কখনোই ভগ্নাংশ বা float/double ডেটার সাথে ব্যবহার করা যায় না। করলে 'Compile Error' দেখাবে।
- মডুলাসের ফলাফলের চিহ্ন সবসময় লব (Numerator) বা প্রথম সংখ্যার চিহ্নের মতো হয়। ভাজকের (Denominator) চিহ্নের ওপর এটি নির্ভর করে না।
উদাহরণ (Example):
ধরি, আমাদের -১৩ কে ৫ দিয়ে ভাগশেষ বের করতে হবে।
কোড: -13 % 5
সমাধান: -১৩ কে ৫ দিয়ে ভাগ করলে ভাগফল -২।
অবশিষ্ট = $-13 - (5 \times -2) = -13 - (-10) = -3$।
সুতরাং, উত্তর: -3
কিন্তু, 13 % -5 হলে উত্তর হবে 3 (কারণ প্রথম সংখ্যা ১৩ পজিটিভ)।
রিলেশনাল ও লজিক্যাল অপারেটর: সত্য-মিথ্যার খেলা
রিলেশনাল অপারেটর দুটি মানের মধ্যে তুলনা করে এবং লজিক্যাল অপারেটর একাধিক শর্তকে যুক্ত করে। এদের ফলাফল সবসময় হয় 0 (মিথ্যা/False) অথবা 1 (সত্য/True)।

সংজ্ঞা (Definition):
রিলেশনাল অপারেটর: >, <, >=, <=, == (সমান), != (সমান নয়)।
লজিক্যাল অপারেটর: && (AND), || (OR), ! (NOT)।
শর্ট-সার্কিট লজিক (Short-circuit Evaluation)
এটি পরীক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ একটি কনসেপ্ট। সি কম্পাইলার লজিক্যাল এক্সপ্রেশন বাম থেকে ডানে চেক করে এবং চূড়ান্ত ফলাফল নিশ্চিত হওয়া মাত্রই বাকি অংশ চেক করা বন্ধ করে দেয়।
পরীক্ষার টিপস (Exam Tip):
১. AND (&&) এর ক্ষেত্রে: যদি প্রথম শর্ত মিথ্যা (False/0) হয়, তবে পুরো এক্সপ্রেশন মিথ্যা হবে। তাই কম্পাইলার দ্বিতীয় শর্ত আর চেক করে না।
২. OR (||) এর ক্ষেত্রে: যদি প্রথম শর্ত সত্য (True/1) হয়, তবে পুরো এক্সপ্রেশন সত্য হবে। তাই কম্পাইলার দ্বিতীয় শর্ত আর চেক করে না।
উদাহরণ (Example):
int x = 5;
if (x > 10 && x++) {
// কিছু কোড
}
printf("%d", x);
ব্যাখ্যা: এখানে x > 10 মিথ্যা। যেহেতু && ব্যবহার করা হয়েছে এবং প্রথম অংশ মিথ্যা, তাই কম্পাইলার পরের অংশ x++ আর এক্সিকিউট করবে না। ফলে x-এর মান বাড়ব না, 5-ই থাকবে। এটিই শর্ট-সার্কিট লজিক।
অ্যাসাইনমেন্ট এবং ইনক্রিমেন্ট/ডিক্রিমেন্ট অপারেটর
প্রোগ্রামিংয়ে = এবং == এর মধ্যে আকাশ-পাতাল পার্থক্য। এছাড়াও ++a এবং a++ এর পার্থক্য বোঝা জরুরি।
= বনাম ==
| বৈশিষ্ট্য | = (Assignment) |
== (Relational) |
|---|---|---|
| কাজ | ডান পাশের মান বাম পাশের ভেরিয়েবলে রাখে। | দুটি মান সমান কি না তা যাচাই করে। |
| উদাহরণ | a = 5; (a এর মান ৫ হলো) |
if (a == 5) (a এর মান ৫ কি না?) |
প্রিফিক্স (Prefix) ও পোস্টফিক্স (Postfix) ইনক্রিমেন্ট
সংজ্ঞা (Definition):
Prefix (++a): "Change first, then use." আগে মান ১ বাড়বে, তারপর সেই বর্ধিত মান এক্সপ্রেশনে ব্যবহৃত হবে।
Postfix (a++): "Use first, then change." আগে বর্তমান মান এক্সপ্রেশনে ব্যবহৃত হবে, পরে মেমোরিতে মান ১ বাড়বে।
উদাহরণ (Worked Example):
int a = 10, y;
y = ++a; // এখানে a আগে বেড়ে ১১ হবে, তারপর y তে ১১ অ্যাসাইন হবে। (y=11, a=11)
বনাম
int a = 10, y;
y = a++; // এখানে a এর বর্তমান মান ১০ আগে y তে যাবে, পরে a বেড়ে ১১ হবে। (y=10, a=11)
বিটওয়াইজ অপারেটর (Bitwise Operators)
অনেক শিক্ষার্থী এই অংশটি এড়িয়ে যায়, কিন্তু এখান থেকে সৃজনশীল ও এমসিকিউ প্রশ্ন আসে। বিটওয়াইজ অপারেটর সরাসরি সংখ্যার বাইনারি বিট (0 বা 1) নিয়ে কাজ করে।

প্রধান বিটওয়াইজ অপারেটরগুলো হলো:
- & (Bitwise AND): দুটি বিট ১ হলেই কেবল ১ হবে।
- | (Bitwise OR): যেকোনো একটি বিট ১ হলেই ১ হবে।
- ^ (Bitwise XOR): দুটি বিট ভিন্ন হলে ১ হবে (0,1 বা 1,0), একই হলে ০ হবে।
- << (Left Shift): বিটগুলোকে বামে সরিয়ে দেয় (প্রতি শিফটে মান দ্বিগুণ হয়)।
- >> (Right Shift): বিটগুলোকে ডানে সরিয়ে দেয় (প্রতি শিফটে মান অর্ধেক হয়)।
উদাহরণ (Example):
ধরি, a = 5 (বাইনারি 101) এবং b = 6 (বাইনারি 110)।
- AND (&):
101
110
100 (ডেসিমাল মান: 4)
- OR (|):
101
110
111 (ডেসিমাল মান: 7)
- XOR (^):
101
110
011 (ডেসিমাল মান: 3)
অপারেটর প্রিসিডেন্স ও অ্যাসোসিয়েটিভিটি
যখন একটি লাইনে একাধিক অপারেটর থাকে, তখন কোনটির কাজ আগে হবে তা নির্ধারণ করে Precedence। আর যদি একই প্রিসিডেন্সের একাধিক অপারেটর থাকে, তবে কোন দিক থেকে কাজ শুরু হবে তা নির্ধারণ করে Associativity।
গুরুত্বপূর্ণ (Operator Hierarchy):
কাজের অগ্রাধিকার (উচ্চ থেকে নিম্ন):
১. () : ব্র্যাকেট
২. ++, --, ! : ইউনারি (ডান থেকে বামে)
৩. *, /, % : গুণ, ভাগ, মডুলাস (বাম থেকে ডানে)
৪. +, - : যোগ, বিয়োগ (বাম থেকে ডানে)
৫. >, <, >= : রিলেশনাল
৬. ==, != : ইকুয়ালিটি
৭. && : লজিক্যাল AND
৮. || : লজিক্যাল OR
৯. =, += : অ্যাসাইনমেন্ট (ডান থেকে বামে - খুবই গুরুত্বপূর্ণ)
পরীক্ষার টিপস (Exam Tip):
লক্ষ্য করো, অ্যাসাইনমেন্ট অপারেটরের কাজ সবার শেষে হয় এবং এটি ডান থেকে বামে (Right to Left) কাজ করে।
যেমন: a = b = 10; এখানে আগে b = 10 হবে, তারপর a তে সেই মান যাবে।
সংক্ষিপ্ত সারাংশ (Quick Revision)
মনে রাখার মূল পয়েন্ট:
- ইন্টিজার ভাগ করলে দশমিক অংশ হারিয়ে যায় (5/2 = 2)।
- মডুলাস অপারেটর (%) ফ্লোট বা ডাবলের সাথে কাজ করে না।
- && অপারেশনে প্রথম শর্ত মিথ্যা হলে পরেরটি চেক হয় না (Short-circuit)।
- a++ মানে আগে ব্যবহার, পরে বৃদ্ধি। ++a মানে আগে বৃদ্ধি, পরে ব্যবহার।
- অ্যাসাইনমেন্ট অপারেটর (=) এবং রিলেশনাল অপারেটর (==) এক নয়।
- বিটওয়াইজ অপারেটর সরাসরি বাইনারি মানে কাজ করে।
পরিভাষা (Glossary)
| পরিভাষা (Term) | সংজ্ঞা (Definition) |
|---|---|
| Operator | গাণিতিক বা যৌক্তিক কাজ সম্পাদনকারী বিশেষ চিহ্ন। |
| Operand | যেই ভেরিয়েবল বা মানের ওপর অপারেটর কাজ করে। |
| Unary Operator | যে অপারেটর একটিমাত্র অপারেন্ড নিয়ে কাজ করে (যেমন ++, --)। |
| Ternary Operator | যে অপারেটরে তিনটি অংশ থাকে (? :)। এটি if-else এর সংক্ষিপ্ত রূপ। |
| Short-circuit | লজিক্যাল অপারেশনের সময় অপ্রয়োজনীয় শর্ত চেক না করার পদ্ধতি। |
| Precedence | একাধিক অপারেটরের মধ্যে কার কাজ আগে হবে তার অগ্রাধিকার। |