যদি বিদ্যমান থাকে তবে অন্তর্ভুক্ত করতে শিরোলেখ ফাইল আছে?
এই কোডটি সংকলনের ত্রুটি দেয়:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
যদি বিদ্যমান থাকে তবে অন্তর্ভুক্ত করতে শিরোলেখ ফাইল আছে?
এই কোডটি সংকলনের ত্রুটি দেয়:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char হয় অগত্যা এক বাইট। এটি কেবল যে বাইট অগত্যা 8 বিট নয়।
CHAR_BIT। আমি একাধিক এমবেডেড সিস্টেমে কাজ করেছি যেখানে বাইটগুলি দৈর্ঘ্যে 8 বিট নয়। একটি চর 1 টি আকার হিসাবে সংজ্ঞায়িত করা হয়, তাই হ্যাঁ, একটি চর সবসময় বাইট হয়।
char, যা কমপক্ষে 8 বিট। "বাইট" শব্দটি অন্যান্য প্রসঙ্গে আলাদাভাবে সংজ্ঞায়িত করা যেতে পারে, তবে সি বা সি ++ নিয়ে আলোচনা করার সময় মানটির সংজ্ঞাটি বদ্ধ থাকাই ভাল।
using byte = unsigned charএবং এটি দিয়ে করা হবে (যেমন rmp এর উত্তর থেকে বোঝা যায়)?
উত্তর:
না সি ++ তে কোনও বাইট ডেটা টাইপ নেই। তবে আপনি সর্বদা স্ট্যান্ডার্ড লাইব্রেরি থেকে বিটসেট শিরোনাম অন্তর্ভুক্ত করতে পারেন এবং বাইটের জন্য একটি টাইপডেফ তৈরি করতে পারেন:
typedef bitset<8> BYTE;
এনবি: উইনডেফ এইচ উইন্ডোজ কোডের জন্য বাইওয়াইটি সংজ্ঞায়িত করেছে, আপনি যদি উইন্ডোজকে টার্গেট করতে চান তবে আপনি BYTE ব্যতীত অন্য কিছু ব্যবহার করতে চাইতে পারেন।
সম্পাদনা: উত্তরটি ভুল হওয়ার পরামর্শের জবাবে। উত্তরটি ভুল নয়। প্রশ্নটি ছিল "সি ++ তে কোনও 'বাইট' ডেটা টাইপ আছে কি?" উত্তরটি ছিল এবং তা হ'ল: "না, সি ++ তে কোনও বাইট ডেটা টাইপ নেই"।
প্রস্তাবিত সম্ভাব্য বিকল্পের জন্য যা জিজ্ঞাসা করা হয়েছিল যে প্রস্তাবিত বিকল্পটি আরও ভাল কেন?
আমার সি ++ স্ট্যান্ডার্ডের অনুলিপি অনুসারে:
"অক্ষর (চর) হিসাবে ঘোষিত অবজেক্টগুলি বাস্তবায়নের যে কোনও সদস্যের বেসিক চরিত্র সেটটি যথেষ্ট পরিমাণে সংরক্ষণ করতে হবে": 3.9.1.1
আমি এটি পড়তে পরামর্শ দিয়েছিলাম যে কোনও সংকলক বাস্তবায়নের জন্য যদি মৌলিক চরিত্রের সেটটির সদস্যকে সঞ্চয় করতে 16 বিট লাগে তবে একটি চরের আকার 16 বিট হবে। আজকের সংকলকরা চরের জন্য 8 টি বিট ব্যবহার করার ঝোঁক এক জিনিস, তবে আমি যতদূর বলতে পারি এটি অবশ্যই 8 বিট হওয়ার কোনও নিশ্চয়তা নেই।
অন্যদিকে, "শ্রেণীর টেম্পলেট বিটসেট <এন> এমন একটি অবজেক্টের বর্ণনা দেয় যা নির্দিষ্ট সংখ্যক বিট, এন সমন্বিত একটি ক্রম সংরক্ষণ করতে পারে" " : 20.5.1। টেমপ্লেট প্যারামিটার হিসাবে 8 উল্লেখ করে অন্যের শব্দগুলিতে আমি এমন একটি অবজেক্টের সাথে শেষ করি যা 8 টি বিট সমন্বিত একটি ক্রম সঞ্চয় করতে পারে।
বিকল্পটি লেখার আগে প্রোগ্রামটি লেখার প্রেক্ষাপটে আরও ভাল কি না, তাই নির্ভর করে, যতদূর আমি বুঝতে পেরেছি, যদিও আমি ভুল হতে পারি, আপনার সংকলক এবং আপনার প্রয়োজনীয়তার সময়ে। কোডটি ব্যক্তিগতভাবে লেখার ক্ষেত্রে, যতদূর আমি উদ্বিগ্ন, নির্ধারিত বিকল্পটি তাদের প্রয়োজনীয়তা / চায় / প্রয়োজনের জন্য উপযুক্ত কিনা তা নির্ধারণ করা।
bitset<8>চেয়ে ভাল কেমন unsigned char?
std::byte
BIT_CHAR। এটা একটা রহস্য. মহাবিশ্বের একটি রহস্য ..
না, byteসি ++ তে " " নামে কোনও প্রকার নেই । আপনি কি বদলে চাই unsigned char(যদি আপনি ঠিক 8 বিট প্রয়োজন, বা, uint8_tথেকে <cstdint>, সি যেহেতু ++, 11 )। নোট করুন যে charঅগত্যা একটি সঠিক বিকল্প নয়, কারণ এটি signed charকিছু সংকলক এবং unsigned charঅন্যদের জন্য।
char, signed charএবং unsigned charতিনটি স্বতন্ত্র প্রকার। charঅন্য দুজনের একজনের মতোই উপস্থাপনা রয়েছে।
unsigned char8 বিটের চেয়ে বড় হয় তবে uint8_tসংজ্ঞা দেওয়া হবে না।
<stdint.h>পরিবর্তে অন্তর্ভুক্ত করতে হতে পারে <cstdint>।
std::byteগাণিতিক সম্পাদন করতে পারে না, এটি কোনও চুক্তি ভঙ্গকারী হতে পারে।
std::byteশুধু একটি উপরন্তু এক কাজের জন্য ডান টুল নির্বাচন করতে পারবেন (অর্থাত পারেন std::byte, char, unsigned charবা uint_8)।
typedef unsigned char byte;বা typedef std::uint8_t byte;?
char*, unsigned char*বা std::byte*।
std::byteগাণিতিক সম্পাদন না করে ব্যতীত এটি ডিল ব্রেকার হতে পারে।
না, তবে সি ++ 11 সাল থেকে [u] ইন্ট 8_টি রয়েছে ।
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
এটি যদি আপনার সি ++ সংস্করণে স্ট্যান্ড না থাকে: বাইট নাম স্পেসের এসটিডিতে একটি বাইট প্রকারটি সংজ্ঞায়িত করবে। সাধারণত আপনি স্টাডিতে জিনিস যুক্ত করতে চান না, তবে এই ক্ষেত্রে এটি একটি স্ট্যান্ডার্ড জিনিস যা অনুপস্থিত।
এসটিডি :: বাইট এসটিএল থেকে আরও অনেক বেশি কাজ করে।
char।