সি পাইথন প্রোগ্রামিং জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল জেকুয়েরি এইচটিএমএল সিএসএস বুটস্ট্রাপ এঙ্গুলার জেএস
ফোরাম
×

 সি টিউটোরিয়াল

সি প্রোগ্রামিং কি? সি এর ইতিহাস সি এর বৈশিষ্ট্যসমূহ কেন সি শিখবেন? সি ইন্সটলেশন প্রথম সি প্রোগ্রাম সি প্রোগ্রামের ফ্লো প্রোগ্রামিং শেখার সঠিক পদ্ধতি সি কীওয়ার্ড সি আইডেন্টিফায়ার সি ভ্যারিয়েবল সি কনস্ট্যান্ট সি ডাটা টাইপ সি মোডিফায়ার সি ইনপুট/আউটপুট সি অপারেটর সি কমেন্ট সি অপারেটর অগ্রাধিকার

সি কন্ট্রোল স্টেটমেন্ট

সি ইফ সি ইফ...ইলস সি ফর লুপ সি হোহাইল লুপ সি ডু...হোহাইল লুপ সি ব্রেক সি কন্টিনিউ সি সুইচ স্টেটমেন্ট সি goto স্টেটমেন্ট

 সি ফাংশন

সি ফাংশন পরিচিতি সি ইউজার কর্তৃক ফাংশন সি ফাংশন টাইপ সি রিকার্সন সি ভ্যারিয়েবল স্কোপ

 সি অ্যারে

সি অ্যারে পরিচিতি সি মালটি-ডাইমেনশনাল অ্যারে সি অ্যারে ফাংশন

 সি স্ট্রিং

সি স্ট্রিং সি স্ট্রিং ফাংশন

 সি পয়েন্টার

সি পয়েন্টার পরিচিত সি পয়েন্টার অ্যারে সি পয়েন্টার ফাংশন সি মেমোরি ম্যানেজমেন্ট

 সি ফাইল এবং স্ট্রাকচার

স্ট্রাকচার পরিচিত স্ট্রাকচার ও পয়েন্টার সি স্ট্রাকচার ও ফাংশন সি ইউনিয়ন ফাইল হ্যান্ডেলিং

 সি অতিরিক্ত টিউটোরিয়াল

সি লাইব্রেরী সি প্রিপ্রোসেসর এবং ম্যাক্রো সি ইনুমিরেশন সি এরর নিয়ন্ত্রণ সি টাইপ কাস্টিং সি বিট ফিল্ড সি ভ্যারিয়েবল আর্গুমেন্ট সি কমান্ড লাইন আর্গুমেন্ট

 

সি প্রোগ্রামিং বিটিওয়াজ অপারেটর


এই অধ্যায়ে আপনি সি প্রোগ্রামিং এ সকল বিটিওয়াজ অপারেটর(Bitwise Operator) সম্বন্ধে জানবেন


সেন্ট্রাল প্রোসেসিং ইউনিট(CPU) এর মধ্যে এরেথম্যাটিক লজিক ইউনিট(ALU) এ সকল গাণিতিক ক্রিয়াকলাপ যেমন- যোগ-বিয়োগ, গুণ-ভাগ ইত্যাদি বিট-লেভেলে সম্পন্ন হয়। এই বিট-লেভেল(bit-level) অপারেশন সম্পন্ন করার কাজেই বিটওয়াইজ অপারেটর ব্যবহৃত হয়।


সি প্রোগ্রামিং বিটয়াইজ অপারেটর-সমূহ

মনেকরি, নিচের টেবিলে x = 10 (বাইনারিতে 0000 1010) এবং y = 4 (বাইনারিতে 0000 0100)
অপারেটর অপারেটরের অর্থ উদাহরণ(x=10 এবং y=4) ফলাফল
& Bitwise AND x& y = 0 (0000 0000) 0
| Bitwise OR x | y = 14 (0000 1110) 14
^ Bitwise exclusive OR x ^ y = 14 (0000 1110) 14
~ Bitwise complement ~x = -11 (1111 0101) -11
<< Shift left x<< 2 = 42 (0010 1000) 42
>> Shift right x>> 2 = 2 (0000 0010) 2

বিটওয়াইজ AND(&) অপারেটর

বিটওয়াইজ অপারেটরের দুটি অপারেন্ডের বিট যদি 1 হয় তাহলে বিটওয়াইজ AND অপারেটর এর আউটপুট 1 হবে।

কিন্তু যদি বিটওয়াইজ অপারেটর এর যেকোনো একটি অপারেন্ড 0(শূন্য) হয় তাহলে আউটপুট 0(শূন্য) হবে।


বিটওয়াইজ AND(&) অপারেটর এর গাণিতিক ব্যাখ্যা

10 = 0000 1010 (বাইনারিতে)
4  = 0000 0100 (বাইনারিতে)

10 এবং 4 এর বিট অপারেশন
  0000 1010
& 0000 0100
  ________
  0000 0000  = 0 (দশকমিকে)

উদাহরনঃ সি প্রোগ্রামে বিটওয়াইজ AND অপারেটরের ব্যবহার

#include <stdio.h>
int main()
{
    int a = 10, b = 4;
    printf("Output of AND Operator= %d", a&b);
    return 0;
}

আউটপুট

Output = 0

বিটওয়াইজ OR(|) অপারেটর

বিটওয়াইজ অপারেটরের দুটি অপারেন্ডের যেকোনো একটির বিট যদি 1 হয় তাহলে বিটওয়াইজ OR অপারেটর এর আউটপুট 1 হবে।

কিন্তু যদি বিটওয়াইজ অপারেটর এর দুটি অপারেন্ড-ই 0(শূন্য) হয় তাহলে আউটপুট 0(শূন্য) হবে। সি প্রোগ্রামিং এ | কে বিটওয়াইজ OR অপারেটর বলা হয়।


বিটওয়াইজ OR(|) অপারেটর এর গাণিতিক ব্যাখ্যা

10 = 0000 1010 (বাইনারিতে)
4  = 0000 0100 (বাইনারিতে)

10 এবং 4 এর বিট অপারেশন
  0000 1010
| 0000 0100
  ________
  0000 1110  = 14 (দশকমিকে)
  

উদাহরনঃ সি প্রোগ্রামে বিটওয়াইজ OR(|) অপারেটর এর ব্যবহার।

#include <stdio.h>
int main()
{
    int a = 10, b = 4;
    printf("Output of OR Operator = %d", a|b);
    return 0;
}

আউটপুট

Output = 14

বিটওয়াইজ XOR(^) অপারেটর

XOR এর পূর্ণরুপ হলো exclusive OR । বিটওয়াইজ অপারেটর এর দুটি অপারেন্ড যদি পরস্পর বিপরীত হয় তাহলে বিটওয়াইজ XOR অপারেটর এর আউটপুট 1 হবে।

কিন্তু যদি বিটওয়াইজ অপারেটর এর দুটি অপারেন্ড-ই একই রকম হয় তাহলে আউটপুট 0(শূন্য) হবে। সি প্রোগ্রামিং এ ^ কে বিটওয়াইজ XOR অপারেটর বলা হয়।


বিটওয়াইজ XOR অপারেটর গাণিতিক ব্যাখ্যা

10 = 0000 1010 (বাইনারিতে)
4  = 0000 0100 (বাইনারিতে)

10 এবং 4 এর বিট অপারেশন
  0000 1010
^ 0000 0100
  ________
  0000 1110  = 14 (দশকমিকে)

উদাহরনঃ সি প্রোগ্রামে বিটওয়াইজ XOR(^) অপারেটর এর ব্যবহার

#include <stdio.h>
int main()
{
    int a = 10, b = 4;
    printf("Output = %d", a^b);
    return 0;
}

আউটপুট

Output = 14

বিটওয়াইজ পূরক(~) অপারেটর

বিটওয়াইজ পূরক(compliment) অপারেটর হলো উনারী(unary) অপারেটর যা কেবল মাত্র একটি অপারেন্ডের উপর কাজ করে। ইহা 1 কে পরিবর্তন করে 0 করে এবং 0 কে পরিবর্তন করে 1 করে। ইহাকে ~ এর মাধ্যমে চিহ্নিত করা হয়।

10 =  0000 1010 (বাইনারিতে)

10 এর বিটওয়াইজ পূরক অপারেটর
~ 0000 1010 
  ________
  1111 0101  = 245 (দশমিকে)

10 এর বিটওয়াইজ কমপ্লিমেন্ট 245 এর পরিবর্তে -11 হয়েছে। কিন্তু কেন?

কারণ যেকোনো পূর্ণসংখ্যা n এর জন্য বিটিওয়াইজ কমপ্লিমেন্ট -(n+1) হবে। ইহা বুঝার জন্য আপনাকে প্রথমে 2'স কমপ্লিমেন্ট(Two's complement) সম্মন্ধে জানতে হবে।


2's Complement

বাইনারি সংখ্যায় 2's complement অপারেটর ব্যবহৃত হয়। একটি সংখ্যার 2's complement হলো ঐ সংখ্যার পূরকের সাথে ১ যোগ করলে যা হয় তার সমান। উদাহরনস্বরুপঃ

   দশমিক         বাইনারি        1's comliment      2's কমপ্লিমেন্ট 
   
   0            0000 0000      1111 1111     -(1111 1111+1) = -0000 0000 = -0(দশমিকে)
   
   1            0000 0001      1111 1110     -(1111 1110+1) = -1111 1111 = -255((দশমিকে))
   
   245          1111 0101      0000 1010     -(0000 1010+1) = -1111 0101 = -11(দশমিকে)

নোটঃ 2'স কমপ্লিমেন্ট এর ক্ষেত্রে হাতের অঙ্ককে অবজ্ঞা করা হয়। অর্থাৎ ১ যোগ করার পরে শেষ অংকে অবশিষ্ট থাকলে তাকে হিসাবের বাইরে রাখা হয়।

10 এর বিটওয়াইজ কমপ্লিমেন্ট 245 এর পরিবর্তে -11 হয়েছে। কারণ 10 এর বিটওয়াইজ কমপ্লিমেন্ট হলো 245 (দশমিকে)। আবার 245 এর 2's complement হলো -11, সুতরাং 245 এর পরিবর্তে -11 আউটপুট হয়েছে।


যেকোনো সংখ্যা N এর বিটওয়াইজ কমপ্লিমেন্ট হলো -(N+1)

 N এর bitwise complement = ~N (N এর  2's complement ফর্মে)
এবং ~N এর 2'complement = -(~(~N)+1) = -(N+1)

উদাহরণঃ সি প্রোগ্রামে বিটওয়াইজ complement(~) অপারেটর এর ব্যবহার

#include <stdio.h>
int main()
{
    printf("complement = %d\n",~10);
    printf("complement = %d\n",~-20);
    return 0;
}

Output

complement = -11
Output = 19


বিটওয়াইজ Left Shift( <<) অপারেটর

Left shift অপারেটর সমস্ত বিটকে নির্দিষ্ট সংখ্যক বিট বামে সরিয়ে দেয়। ইহাকে << এর মাধ্যমে প্রকাশ করা হয়।

200 = 11010100 (বাইনারিতে)
200<<1 = 1100100000 (বাইনারিতে এবং এক বিট দ্বারা Left shift হয়েছে। )
200<<0 =11010100 (0 বিট দ্বারা Left Shift হয়েছে। )
200<<2 = 1100100000 (বাইনারিতে) =800(দশমিকে)
200<<3 = 11001000000 (bainarite) =1600(দশমিকে)

উদাহরনঃ সি প্রোগ্রামে লেফট শিফট(Left Shift) অপারেটর এর ব্যবহার

#include <stdio.h>
int main()
{
    int num=200, i;
     for (i=0; i<=2; ++i) 
        printf("Left shift by %d: %d\n", i, num<<i);    
    
     return 0;
}

আউটপুট


Left Shift by 0: 200
Left Shift by 1: 400
Left Shift by 2: 800

বিটওয়াইজ Right Shift(>>) অপারেটর

Right shift অপারেটর সমস্ত বিটকে নির্দিষ্ট সংখ্যক বিট ডানে সরিয়ে দেয়। ইহাকে >> এর মাধ্যমে প্রকাশ করা হয়।

200 = 11001000 (বাইনারিতে)
200>>1 = 01100100 (বাইনারিতে এবং 1 বিট দ্বারা Right shift হয়েছে।)
200>>0 = 11010100 (কোনো শিফট হয়নি)
200>>2 = 00110010 (বাইনারিতে) = 50(দশমিকে)
200>>3 = 00011001 (বাইনারিতে) = 25(দশমিকে)

উদাহরনঃ সি প্রোগ্রামে লেফট শিফট(Left Shift) অপারেটর এর ব্যবহার

#include <stdio.h>
int main()
{
    int num=200, i;
    for (i=0; i<=2; ++i)
        printf("Right shift by %d: %d\n", i, num>>i);
    return 0;
}

আউটপুট


Right Shift by 0: 200
Right Shift by 1: 100
Right Shift by 2: 50