উত্তর:
কারণ সিপিইউ কোনও বাইটের চেয়ে ছোট কিছু সম্বোধন করতে পারে না।
bt, bts, btrএবং btc পারেন একক বিট অ্যাড্রেস!
btএকটি বাইট অফসেটকে সম্বোধন করে এবং তারপরে নির্বিশেষে আপনি কোনও বাইটে যান এমন কোনও ঠিকানা নির্দিষ্ট করার সময় কোনও বিট অফসেটে বিটটি পরীক্ষা করে ... বিট অফসেট লিটারালগুলি কিছুটা শব্দযুক্ত ( শ্লেষকে ক্ষমা করে) দেবে।
উইকিপিডিয়া থেকে :
Orতিহাসিকভাবে, একটি বাইট হ'ল কম্পিউটারে টেক্সটের একক অক্ষরকে এনকোড করতে ব্যবহৃত বিটগুলির সংখ্যা এবং এটি এই কারণেই হয় অনেক কম্পিউটার আর্কিটেকচারের মৌলিক ঠিকানাযোগ্য উপাদান ।
তাই বাইট মৌলিক Addressable ইউনিট , যা নিচের কম্পিউটার আর্কিটেকচার ঠিকানা পারবে না। এবং যেহেতু (সম্ভবত) কম্পিউটার নেই যা 4-বিট বাইট সমর্থন করে, তাই আপনার 4 বিট ইত্যাদি নেই bool
তবে, আপনি যদি এমন একটি আর্কিটেকচার ডিজাইন করতে পারেন যা 4-বিটকে বেসিক অ্যাড্রেসিয়েবল ইউনিট হিসাবে সম্বোধন করতে পারে, তবে আপনার boolকেবলমাত্র সেই কম্পিউটারে 4-বিট আকারের হবে !
intএবং charআমার পোস্ট থেকে।
boolপারে না, কারণ আর্কিটেকচারটি নিজের অপকডগুলি দিয়ে কী সম্বোধন করতে পারে তা নির্বিশেষে সি ++ এর মধ্যেchar ক্ষুদ্রতম ঠিকানাযোগ্য ইউনিট । কমপক্ষে 1 টির মান থাকতে হবে এবং সংলগ্ন বস্তুর অবশ্যই সি ++ এ তাদের নিজস্ব ঠিকানা থাকতে হবে , সুতরাং বাস্তবায়নটি কেবল তাদের আরও বড় এবং মেমরির অপচয় করতে হবে। একারণে বিট ক্ষেত্রগুলি একটি বিশেষ কেস হিসাবে বিদ্যমান: কোনও স্ট্রাক্টের বিটফিল্ড সদস্যদের আলাদাভাবে সম্বোধন করার প্রয়োজন হয় না, তাই এগুলি একটির চেয়ে ছোট হতে পারে (যদিও পুরো কাঠামো এখনও তা হতে পারে না)। sizeof(bool)boolchar
charসি ++ এর মধ্যে সবচেয়ে ছোট ঠিকানাযোগ্য ইউনিট বলে ?
sizeof(bool)0.5 :-) হতে পারে না আমি মনে করি কোনও বাস্তবায়ন বৈধভাবে একটি এক্সটেনশন হিসাবে সাব-বাইট পয়েন্টার সরবরাহ করতে পারে তবে সাধারণ উপায়ে বরাদ্দ করা বুলের মতো "সাধারণ" অবজেক্টগুলি স্ট্যান্ডার্ড যা বলে তাই করতে হবে।
সবচেয়ে সহজ উত্তর হল; এর কারণ সিপিইউ মেমরিটিকে বাইটে না, বিটগুলিতে সম্বোধন করে এবং বিটওয়াইজ অপারেশনগুলি খুব ধীর।
তবে সি ++ তে বিট-আকারের বরাদ্দ ব্যবহার করা সম্ভব। বিট ভেক্টরগুলির জন্য স্ট্যান্ড :: ভেক্টর বিশেষীকরণ রয়েছে এবং বিট আকারের এন্ট্রি গ্রহণের জন্য স্ট্রাক্টও রয়েছে।
পুরানো দিনগুলিতে যখন আমাকে রাগের ঝলকানি দিয়ে স্কুলে যেতে হয়েছিল, চড়াই উতরাই ছিল এবং দুপুরের খাবারের মধ্য দিয়ে আমরা যে প্রাণীটিকে স্কুলের পিছনে বনের মধ্যে ট্র্যাক করতে পেরেছিলাম এবং খালি হাতে হত্যা করতে পারি, কম্পিউটারের চেয়ে স্মৃতি খুব কম ছিল আজ. আমি প্রথম যে কম্পিউটারটি ব্যবহার করেছি সেটিতে 6K র্যাম ছিল। 6 মেগাবাইট নয় 6 গিগাবাইট নয় 6 কিলোবাইট আছে। সেই পরিবেশে, যতটা বুলিয়ান আপনি পারা যায় তেমন প্যাক করার পক্ষে এটি প্রচুর পরিমাণে অনুভূত হয়েছিল এবং তাই আমরা সেগুলি বের করে আনার জন্য নিয়মিত অপারেশন ব্যবহার করব use
আজ, যখন লোকেরা আপনাকে কেবল 1 গিগাবাইট র্যাম থাকার কারণে আপনাকে বিদ্রূপ করবে, এবং 200 গিগাবাইটেরও কম সংখ্যক হার্ড ড্রাইভ পাওয়া যায় এমন এক জায়গা যেখানে পুরানো জিনিস রয়েছে, তখন বিটগুলি প্যাক করা কোনও সমস্যা নয়।
আপনার কাছে 1-বিট বাল এবং 4 এবং 2-বিট ইনট থাকতে পারে। তবে এটি কোনও কার্যকারিতা লাভের জন্য একটি অদ্ভুত নির্দেশের সেট তৈরি করবে কারণ এটি আর্কিটেকচারটি দেখার কোনও অপ্রাকৃত উপায়। এটি অব্যবহৃত ডেটা পুনরায় দাবি করার চেয়ে বরং বাইটের আরও ভাল অংশটি "নষ্ট" করা বোধগম্য হয়।
আমার অভিজ্ঞতা অনুসারে একমাত্র অ্যাপ্লিকেশন যা বেশ কয়েকটি বালকে একক বাইটে প্যাক করতে বিরক্ত করে is
আপনি উপ আকারের পূর্ণসংখ্যা পেতে বিট ক্ষেত্রগুলি ব্যবহার করতে পারেন।
struct X
{
int val:4; // 4 bit int.
};
যদিও এটি সাধারণত হার্ডওয়্যার প্রত্যাশিত বিট নিদর্শনগুলির জন্য কাঠামোগত মানচিত্র করতে ব্যবহৃত হয়:
struct SomThing // 1 byte value (on a system where 8 bits is a byte
{
int p1:4; // 4 bit field
int p2:3; // 3 bit field
int p3:1; // 1 bit
};
boolএক বাইট হতে পারে - সিপিইউর সবচেয়ে ছোট ঠিকানাযোগ্য আকার বা বড় হতে পারে। পারফরম্যান্সের উদ্দেশ্যে boolআকার হওয়াটা অস্বাভাবিক কিছু নয় int। নির্দিষ্ট উদ্দেশ্যে যদি (হার্ডওয়্যার সিমুলেশন বলুন) আপনার জন্য এন বিট সহ একটি প্রকারের প্রয়োজন হয় তবে আপনি তার জন্য একটি লাইব্রেরি পেতে পারেন (যেমন জিবিএল লাইব্রেরির BitSet<N>ক্লাস রয়েছে)। আপনি যদি আকারের সাথে উদ্বিগ্ন হন bool(আপনার কাছে সম্ভবত একটি বড় ধারক রয়েছে), তবে আপনি নিজেরাই বিটগুলি প্যাক করতে পারেন বা std::vector<bool>এটি আপনার জন্য এটি ব্যবহার করতে পারেন (এটি পরে ধারক প্রয়োজনীয়তাগুলি পূরণ করে না বলে পরবর্তী সতর্কতা অবলম্বন করুন)।
কারণ সাধারণভাবে, সিপিইউ 1 বাইটের সাথে মেমরি বরাদ্দ করে মৌলিক ইউনিট হিসাবে, যদিও এমপিএসের মতো কিছু সিপিইউ 4-বাইট শব্দ ব্যবহার করে।
তবে প্রতিটি বুলের জন্য এক বিট দিয়ে বিশেষ ফ্যাশনে vectorডিল বরাদ্দ করা হয়।boolvector<bool>
lw/ swআরও বেশি ব্যবহৃত হয়।
বাইট হ'ল একটি কম্পিউটারের ডিজিটাল ডেটা সঞ্চয় করার ছোট একক। একটি কম্পিউটারে র্যামের কয়েক মিলিয়ন বাইট থাকে এবং যার যার ঠিকানা রয়েছে। প্রতিটি বিটের জন্য যদি এটির ঠিকানা থাকে তবে কোনও কম্পিউটার 8 বারের চেয়ে কম র্যাম পরিচালনা করতে পারে যা এটি পারে।
আরও তথ্য: উইকিপিডিয়া
ন্যূনতম আকারটি 1 বাইট হলেও, আপনার কাছে 1 বাইটে 8 বিট বুলিয়ান তথ্য থাকতে পারে:
http://en.wikipedia.org/wiki/Bit_array
জুলিয়া ভাষার উদাহরণস্বরূপ বিটআরে রয়েছে এবং আমি সি ++ বাস্তবায়ন সম্পর্কে পড়েছি।
struct Packed { unsigned int flag1 : 1; unsigned int flag2: 1; };। বেশিরভাগ সংকলক একটি সম্পূর্ণ বরাদ্দ দেবেunsigned int, তবে আপনি যখন পড়বেন / লিখবেন তখন তারা নিজেরাই বিট-টুইডলিংয়ের সাথে ডিল করে। এছাড়াও তারা নিজেরাই মডুলো অপারেশনগুলির সাথে ডিল করে। এটি একটিunsigned small : 4বৈশিষ্ট্যের 0 এবং 15 এর মধ্যে একটি মান রয়েছে, এবং যখন এটি 16 এ পাওয়া উচিত, এটি পূর্ববর্তী বিটটি ওভাররাইট করতে পারে না :)