পঞ্চম অধ্যায় পাঠ-১১ ‘সি’ প্রোগ্রামিং ভাষার অপারেটরসমূহ এবং রাশিমালা।
এই পাঠ শেষে যা যা শিখতে পারবে-
- ১। অপারেটর ব্যাখ্যা করতে পারবে।
- ২। ‘সি’ প্রোগ্রামিং ভাষার বিভিন্ন অপারেটর এবং তাদের ব্যবহার বর্ণনা করতে পারবে।
- ৩। রাশিমালা ব্যাখ্যা করতে পারবে।
- ৪। অপারেটরের precedence এবং associativity ব্যাখ্যা করতে পারবে।
অপারেটরঃ ‘সি’ প্রোগ্রামিং ভাষায় গাণিতিক এবং যৌক্তিক কাজ সম্পাদন করার জন্য কতগুলো বিশেষ চিহ্ন বা সিম্বল ব্যবহৃত হয়, এই সিম্বল বা চিহ্নগুলোকে অপারেটর বলা হয়। অপারেটরগুলো যার উপর কাজ করে তাকে অপারেন্ড বলা হয়। যেমনঃ A + B * 5 এই এক্সপ্রেশনটিতে +, * হলো অপারেটর ও A, B হলো অপারেন্ড, 5 হলো ধ্রুবক এবং A + B * 5 হলো এক্সপ্রেশন।
অপারেটর কতগুলো অপারেন্ড নিয়ে কাজ করে তার উপর ভিত্তি করে তিন প্রকার। যথা-
- ১। ইউনারি(Unary) অপারেটর
- ২। বাইনারি(Binary) অপারেটর
- ৩। টারনারি(Ternary) অপারেটর
ইউনারি(Unary) অপারেটরঃ যেসব অপারেটর শুধুমাত্র একটি অপারেন্ড নিয়ে কাজ করে তাদেরকে ইউনারি(Unary) অপারেটর বলে। যেমনঃ Increment (++) and decrement (–) operators
বাইনারি(Binary) অপারেটরঃ যেসব অপারেটর দুইটি অপারেন্ড নিয়ে কাজ করে তাদেরকে বাইনারি(Binary) অপারেটর বলে। যেমনঃ
- 1. Arithmetic operators (+, -, * etc.)
- 2. Relational Operators ( <, >, ==)
- 3. Logical Operators (&&, ||)
- 4. Assignment Operators (=, +=, -=)
- 5. Bitwise Operators (&, |)
টারনারি(Ternary) অপারেটরঃ যেসব অপারেটর তিনটি অপারেন্ড নিয়ে কাজ করে তাদেরকে টারনারি(Ternary) অপারেটর বলে। যেমনঃ Conditional Operators(?:)
কাজের প্রকৃতির উপর ভিত্তি করে ‘সি’ প্রোগ্রামিং ভাষার অপারেটর সমূহ:
- ১। গাণিতিক অপারেটর (Arithmetic Operators)
- ২। রিলেশনাল অপারেটর (Relational Operators)
- ৩। লজিক্যাল অপারেটর (Logical Operators)
- ৪। অ্যাসাইনমেন্ট অপারেটর (Assignment Operators)
- ৫। ইনক্রিমেন্ট এবং ডিক্রিমেন্ট অপারেটর (Increment and Decrement Operators)
- ৬। কন্ডিশনাল অপারেটর (Conditional Operators)
- ৭। বিট ওয়াইজ অপারেটর (Bitwise Operators)
- ৮। বিশেষ অপারেটর (Special Operator)
গাণিতিক অপারেটর (Arithmetic Operators): ‘সি’ প্রোগ্রামে বিভিন্ন গাণিতিক কাজ (যেমন-যোগ, বিয়োগ, গুণ, ভাগ প্রভৃতি) করার জন্য যেসব অপারেটর ব্যবহৃত হয়, সেসব অপারেটরকে গাণিতিক অপারেটর বলা হয়।
‘সি’ প্রোগ্রামিং ভাষায় গাণিতিক অপারেটর গুলোর অগ্রগণ্যতা হলঃ *, /, %, +, –
রিলেশনাল অপারেটর (Relational Operators): প্রোগ্রাম নির্বাহের সময় দুটি চলকের মধ্যে তুলনার ক্ষেত্রে রিলেশনাল অপারেটর ব্যবহৃত হয়। রিলেশন বলতে একটি অপারেন্ড অপর অপারেন্ড থেকে ছোট কিংবা বড় বা সমান ইত্যাদি বুঝায়।
লজিক্যাল অপারেটর (Logical Operators): প্রোগ্রামে যুক্তিমূলক এক্সপ্রেশন নিয়ে কাজ করার জন্য যেসব অপারেটর ব্যবহার করা হয় সেগুলোকে লজিক্যাল অপারেটর বলা হয়।
অ্যাসাইনমেন্ট অপারেটর (Assignment Operators): কোনো এক্সপ্রেশন বা ভেরিয়েবলের মানকে অন্য কোনো ভেরিয়েবলের মান হিসেবে নির্ধারণ করতে যেসব অপারেটর ব্যবহার করা হয়, সেগুলোকে অ্যাসাইনমেন্ট অপারেটর বলা হয়।
ইনক্রিমেন্ট এবং ডিক্রিমেন্ট অপারেটর (Increment and Decrement Operators):
‘সি’ প্রোগ্রামে দুটি গুরুত্বপূর্ণ অপারেটর ব্যবহার করা হয় যা সাধারণত অন্য ভাষায় ব্যবহার করা হয় না। অপারেটর দুটি হচ্ছে Increment ( ++ ) and Decrement ( — ) Operators । ইনক্রিমেন্ট অপারেটর ব্যবহার করা হয় কোন একটি ভেরিয়েবলের মান ১ বৃদ্ধি করতে এবং ডিক্রিমেন্ট অপারেটর ব্যবহার করা হয় কোন একটি ভেরিয়েবলের মান ১ হ্রাস করতে। ইনক্রিমেন্ট এবং ডিক্রিমেন্ট উভয় অপারেটর একটি অপারেন্ডের উপর কাজ করে। তাই এদেরকে ইউনারি অপারেটর বলা হয়।
ইনক্রিমেন্ট অপারেটরের প্রকারভেদঃ
- pre-increment
- post-increment
pre-increment (++ variable): pre ইনক্রিমেন্ট এর ক্ষেত্রে চলকের মান আগে বৃদ্ধি করে এবং তারপর আপডেট মানটি নিয়ে কাজ করে।
Output:
post-increment (variable ++): post ইনক্রিমেন্ট এর ক্ষেত্রে চলকের বর্তমান মান নিয়ে কাজ করে তারপর চলকের মান বৃদ্ধি করে।
Output:
ডিক্রিমেন্ট অপারেটরের প্রকারভেদঃ
- pre-decrement
- post-decrement
Pre-decrement (– variable): pre ডিক্রিমেন্ট এর ক্ষেত্রে চলকের মান আগে হ্রাস করে এবং তারপর আপডেট মানটি নিয়ে কাজ করে।
Output:
post-decrement (variable –): post ডিক্রিমেন্ট এর ক্ষেত্রে চলকের বর্তমান মান নিয়ে কাজ করে তারপর চলকের মান হ্রাস করে।
Output:
কন্ডিশনাল অপারেটর (Conditional Operators):
‘সি’ প্রোগ্রামে শর্ত সাপেক্ষে কোন কাজ করার জন্য কন্ডিশনাল অপারেটর ব্যবহৃত হয়। কন্ডিশনাল অপারেটরের গঠন নিম্নরুপঃ
Syntax : (Condition? true_value: false_value);
Example : (A < 0 ? Negative : Positive);
উপরের উদাহরণে, যদি A , 0 এর চেয়ে ছোট হয় তাহলে Negative রিটার্ন করবে অন্যথায় Positive রিটার্ন করবে।
কন্ডিশন সত্য হলে Expr1 সম্পাদিত হবে এবং কন্ডিশন মিথ্যা হলে Expr2 সম্পাদিত হবে। এই অপারেটরকে টারনারি অপারেটরও বলা হয়।
বিট ওয়াইজ অপারেটর (Bitwise Operators): ‘সি’ প্রোগ্রামে বিট পরীক্ষা করার জন্য বা কোনো বিট ডানে বা বামে সরানোর জন্য বিট ওয়াইজ অপারেটর ব্যবহার করা হয়। Float বা Double টাইপের ডেটার ক্ষেত্রে বিট ওয়াইজ অপারেটর ব্যবহার করা যায় না।
বিট ওয়াইজ অপারেটর এর সত্যক সারনিঃ
বিশেষ অপারেটর (Special Operator): ‘সি’ প্রোগ্রামে বিশেষ কিছু কাজের জন্য ব্যবহৃত অপারেটরকে বিশেষ অপারেটর বলে। যেমনঃ
অপারেটর | বর্ননা |
& |
চলকের অ্যাড্রেস পেতে এই অপারেটর ব্যবহৃত হয়।
উদাহরণ : &a, a এর অ্যাড্রেস দিবে।
|
* |
চলকের পয়েন্টার হিসেবে ব্যবহৃত হয়।
উদাহরণ : * a যেখানে, * হলো a চলকের পয়েন্টার।
|
Sizeof () |
চলকের মেমোরি সাইজ রিটার্ন করে।
উদাহরণ: size of (char); ১ রিটার্ন করবে।
|
রাশিমালা (Expression): চলক, ধ্রুবক ও বিভিন্ন অপারেটরের সমন্বয়ে রাশিমালা বা Expression তৈরি হয়। গাণিতিক Expression গুলো ‘সি’ প্রোগ্রামে নিম্নরুপে লেখা হয়-
Expression বা রাশিমালায় অপারেটরের precedence এবং associativity:
একটি রাশিমালায় একাধিক অপারেটর থাকলে কম্পাইলার অপারেটরগুলোর অগ্রগণ্যতা দেয় এবং অগ্রগণ্যতা অনুযায়ী কাজ করে। প্রোগ্রামিং ভাষায় একে অপারেটরের precedence বলে। ‘সি’ প্রোগ্রামিং ভাষায় গাণিতিক অপারেটর গুলোর অগ্রগণ্যতা হলঃ *, /, %, +, – । অর্থাৎ x+y*x-a এই রাশিমালায় আগে গুণের কাজ, তারপর যোগের কাজ এবং সবশেষে বিয়োগের কাজ সম্পন্ন হবে।
আবার একটি রাশিমালায় একই precedence বিশিষ্ট একাদিক অপারেটর থাকলে কম্পাইলার কিছু অপারেটরের ক্ষেত্রে বামদিক থেকে ডানদিকে এবং কিছু অপারেটরের ক্ষেত্রে ডানদিক থেকে বামদিকে কাজ করে। প্রোগ্রামিং ভাষায় একে অপারেটর associativity বলে। যেমন- x+y+z+a রাশিমালায় ‘+’ অপারেটর একাধিকবার ব্যবহৃত হয়েছে। এই ‘+’ অপারেটরের associativity হল বাম থেকে ডান। তাই উপরের রাশিমালায় প্রথমে x ও y যোগ করে তার সাথে z এর যোগ এবং অবশেষে প্রাপ্ত যোগফলের সাথে a এর যোগ।
নিচের টেবিলে, সর্বোচ্চ precedence (অগ্রাধিকার) বিশিষ্ট অপারেটর টেবিলের শীর্ষে অবস্থিত এবং সর্বনিম্ন precedence (অগ্রাধিকার) বিশিষ্ট অপারেটর টেবিলের সর্বনিম্ন নীচে অবস্থিত।
Category | Operator | Associativity |
---|---|---|
Postfix | () [] -> . ++ – – | Left to right |
Unary | + – ! ~ ++ – – (type)* & sizeof | Right to left |
Multiplicative | * / % | Left to right |
Additive | + – | Left to right |
Shift | << >> | Left to right |
Relational | < <= > >= | Left to right |
Equality | == != | Left to right |
Bitwise AND | & | Left to right |
Bitwise XOR | ^ | Left to right |
Bitwise OR | | | Left to right |
Logical AND | && | Left to right |
Logical OR | || | Left to right |
Conditional | ?: | Right to left |
Assignment | = += -= *= /= %=>>= <<= &= ^= |= | Right to left |
Comma | , | Left to right |
পাঠ মূল্যায়ন-
জ্ঞানমূলক প্রশ্নসমূহঃ
- ক। অপারেটর কী?
- ক। ইউনারি অপারেটর কী?
- ক। বাইনারি অপারেটর কী?
- ক। টারনারি অপারেটর কী?
- ক। রিলেশনাল অপারেটর কী?
- ক। লজিক্যাল অপারেটর কী?
- ক। কন্ডিশনাল অপারেটর কী?
- ক। রাশিমালা কী?
- ক। অপারেন্ড কী?
- ক। অপারেটর প্রিসিডেন্স কী?
অনুধাবনমূলক প্রশ্নসমূহঃ
- খ। কখন ইউনারি অপারেটর ব্যবহার করা হয়? ব্যাখ্যা কর।
- খ। প্রোগ্রামে অপারেটরের গুরুত্ব লেখ।
- খ। i++ এবং ++i ব্যাখ্যা কর।
- খ। = এবং == এর মধ্যে পার্থক্য লেখ।