কম্পিউটার

সি-তে বিট ফিল্ড


এই বিভাগে আমরা সি.

-এ বিট ক্ষেত্রগুলি কী তা বলব

ধরুন আপনার সি প্রোগ্রামে স্ট্যাটাস নামে একটি কাঠামোতে গ্রুপ করা অনেকগুলি সত্য/মিথ্যা ভেরিয়েবল রয়েছে, নিম্নরূপ –

struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status;

এই কাঠামোর জন্য 8 বিট মেমরি স্পেস প্রয়োজন কিন্তু প্রকৃতপক্ষে, আমরা প্রতিটি ভেরিয়েবলে 0 বা 1 সংরক্ষণ করতে যাচ্ছি। সি প্রোগ্রামিং ল্যাঙ্গুয়েজ এই ধরনের পরিস্থিতিতে মেমরি স্পেস ব্যবহার করার জন্য একটি ভাল উপায় অফার করে।

আপনি যদি একটি কাঠামোর ভিতরে এই ধরনের ভেরিয়েবল ব্যবহার করেন তবে আপনি একটি ভেরিয়েবলের প্রস্থ নির্ধারণ করতে পারেন যা C কম্পাইলারকে বলে যে আপনি শুধুমাত্র সেই সংখ্যার বিটগুলি ব্যবহার করতে যাচ্ছেন। উদাহরণস্বরূপ, উপরের কাঠামোটি নিম্নরূপ −

পুনরায় লেখা যেতে পারে
struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status;

উপরের স্ট্রাকচারে স্ট্যাটাস ভেরিয়েবলের জন্য 4 বিট মেমরি স্পেস প্রয়োজন, কিন্তু মান সংরক্ষণ করতে শুধুমাত্র 2 বিট ব্যবহার করা হবে।

আপনি যদি 1 বিট প্রস্থ সহ 32টি ভেরিয়েবল পর্যন্ত ব্যবহার করেন, তবে স্ট্যাটাস স্ট্রাকচারটি 4 বিট ব্যবহার করবে। যাইহোক যত তাড়াতাড়ি আপনার 33 টি ভেরিয়েবল আছে, এটি মেমরির পরবর্তী স্লট বরাদ্দ করবে এবং এটি 8 বিট ব্যবহার করা শুরু করবে। −

ধারণাটি বুঝতে নিচের উদাহরণটি পরীক্ষা করা যাক

উদাহরণ কোড

#include <stdio.h>
#include <string.h>
/* define simple structure */
struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status1;
/* define a structure with bit fields */
struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status2;
int main( ) {
   printf( "Memory size occupied by status1 : %d\n", sizeof(status1));
   printf( "Memory size occupied by status2 : %d\n", sizeof(status2));
   return 0;
}

আউটপুট

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

বিট ক্ষেত্র ঘোষণা:

একটি বিট-ক্ষেত্রের ঘোষণার একটি কাঠামোর ভিতরে নিম্নলিখিত ফর্ম রয়েছে -

struct {
   type [member_name] : width ;
};

নিচের সারণীটি একটি বিট ক্ষেত্রের পরিবর্তনশীল উপাদান −

বর্ণনা করে ৷
উপাদান বিবরণ
টাইপ একটি পূর্ণসংখ্যার ধরন যা নির্ধারণ করে কিভাবে একটি বিট-ফিল্ডের মান ব্যাখ্যা করা হয়। ধরনটি হতে পারে int, স্বাক্ষরিত int বা স্বাক্ষরবিহীন int৷
সদস্য_নাম বিট-ক্ষেত্রের নাম।
প্রস্থ বিট-ক্ষেত্রে বিটের সংখ্যা। প্রস্থ অবশ্যই নির্দিষ্ট প্রকারের বিট প্রস্থের কম বা সমান হতে হবে।

পূর্বনির্ধারিত প্রস্থের সাথে সংজ্ঞায়িত ভেরিয়েবলকে বিট ক্ষেত্র বলা হয়। একটি বিট ক্ষেত্র একক বিটের বেশি ধারণ করতে পারে; উদাহরণস্বরূপ, যদি 0 থেকে 7 পর্যন্ত একটি মান সংরক্ষণ করার জন্য আপনার একটি ভেরিয়েবলের প্রয়োজন হয়, তাহলে আপনি নিম্নরূপ 3 বিটের প্রস্থ সহ একটি বিট ক্ষেত্র সংজ্ঞায়িত করতে পারেন -

struct {
   unsigned int age : 3;
} Age;

উপরের কাঠামোর সংজ্ঞা C কম্পাইলারকে নির্দেশ দেয় যে বয়সের পরিবর্তনশীল মানটি সংরক্ষণ করতে শুধুমাত্র 3 বিট ব্যবহার করতে চলেছে। আপনি যদি 3 বিটের বেশি ব্যবহার করার চেষ্টা করেন তবে এটি আপনাকে তা করতে দেবে না। আসুন আমরা নিম্নলিখিত উদাহরণটি চেষ্টা করি -

উদাহরণ কোড

#include <stdio.h>
#include <string.h>
struct {
   unsigned int age : 3;
} Age;
int main( ) {
   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );
   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );
   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );
   return 0;
}

আউটপুট

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0

  1. গঠন ধারণা ব্যবহার করে সি ভাষায় বিট ক্ষেত্র ব্যাখ্যা করুন

  2. C গ্রাফিক্সে bar() ফাংশন

  3. C-তে একটি বিন্যাসে রেঞ্জের পণ্য

  4. C/C++ এ বহুমাত্রিক অ্যারে