এই প্রশ্নের উত্তরগুলি পড়ে, আমি এই মন্তব্যটি [সম্পাদিত] জুড়ে এসেছি।
2 এর পরিপূরক 0100 (4) হবে 1100. আমি যদি সাধারণভাবে বলি তবে এখন 1100 হয়। সুতরাং, যখন আমি সাধারণ 1100 বলি তখন এটি 12 হয়, তবে আমি যখন 2 এর পরিপূরক 1100 বলি তখন এটি -4 হয়? এছাড়াও, জাভাতে যখন 1100 (এখনকার জন্য 4 টি বিট ধরে নেওয়া যায়) সংরক্ষণ করা হয় তবে এটি +12 বা -4 হয় কীভাবে নির্ধারিত হয়? - জুলাই 2 জুলাই 16:53 এ
আমার মতে, এই মন্তব্যে জিজ্ঞাসা করা প্রশ্নটি বেশ আকর্ষণীয় এবং তাই আমি সবার আগে এটি পুনরায় বিবরণ দিতে এবং তারপরে একটি উত্তর এবং একটি উদাহরণ সরবরাহ করতে চাই।
প্রশ্ন - এক বা একাধিক সংলগ্ন বাইটকে ব্যাখ্যা করার পদ্ধতি কীভাবে সিস্টেমটি প্রতিষ্ঠা করতে পারে? বিশেষত, সিস্টেমটি কীভাবে প্রতিষ্ঠিত করতে পারে যে প্রদত্ত বাইটের ক্রমটি একটি সরল বাইনারি সংখ্যা বা 2 এর পরিপূরক সংখ্যা কিনা?
উত্তর - সিস্টেম প্রকারভেদ করে কীভাবে বাইটের ক্রমটি ব্যাখ্যা করতে পারে তা প্রতিষ্ঠিত করে। প্রকারগুলি সংজ্ঞায়িত করে
- কত বাইট বিবেচনা করতে হবে
- কীভাবে সেই বাইটগুলি ব্যাখ্যা করতে হবে
উদাহরণ - নীচে আমরা ধরে নিই যে এটি
char
এর 1 বাইট দীর্ঘ
short
এর দৈর্ঘ্য 2 বাইট
int
এর এবং float
এর গুলি 4 বাইট দীর্ঘ
দয়া করে নোট করুন যে এই আকারগুলি আমার সিস্টেমে নির্দিষ্ট। যদিও বেশ সাধারণ, তারা সিস্টেম থেকে সিস্টেমের চেয়ে আলাদা হতে পারে। আপনার সিস্টেমে কী রয়েছে সে সম্পর্কে আপনি যদি আগ্রহী হন তবে আকারের অপারেটরটি ব্যবহার করুন ।
সবার আগে আমরা 4 বাইট সমন্বিত একটি অ্যারে সংজ্ঞায়িত করি 10111101
এবং হেক্সাডেসিমাল সংখ্যার সাথে বাইনারি সংখ্যার সাথে তাদের সমস্তটি আরম্ভ করি BD
।
// BD(hexadecimal) = 10111101 (binary)
unsigned char l_Just4Bytes[ 4 ] = { 0xBD, 0xBD, 0xBD, 0xBD };
তারপরে আমরা বিভিন্ন ধরণের ব্যবহার করে অ্যারের সামগ্রীটি পড়ি।
unsigned char
এবং signed char
// 10111101 as a PLAIN BINARY number equals 189
printf( "l_Just4Bytes as unsigned char -> %hi\n", *( ( unsigned char* )l_Just4Bytes ) );
// 10111101 as a 2'S COMPLEMENT number equals -67
printf( "l_Just4Bytes as signed char -> %i\n", *( ( signed char* )l_Just4Bytes ) );
unsigned short
এবং short
// 1011110110111101 as a PLAIN BINARY number equals 48573
printf( "l_Just4Bytes as unsigned short -> %hu\n", *( ( unsigned short* )l_Just4Bytes ) );
// 1011110110111101 as a 2'S COMPLEMENT number equals -16963
printf( "l_Just4Bytes as short -> %hi\n", *( ( short* )l_Just4Bytes ) );
unsigned int
, int
এবংfloat
// 10111101101111011011110110111101 as a PLAIN BINARY number equals 3183328701
printf( "l_Just4Bytes as unsigned int -> %u\n", *( ( unsigned int* )l_Just4Bytes ) );
// 10111101101111011011110110111101 as a 2'S COMPLEMENT number equals -1111638595
printf( "l_Just4Bytes as int -> %i\n", *( ( int* )l_Just4Bytes ) );
// 10111101101111011011110110111101 as a IEEE 754 SINGLE-PRECISION number equals -0.092647
printf( "l_Just4Bytes as float -> %f\n", *( ( float* )l_Just4Bytes ) );
র্যামের 4 টি বাইট ( l_Just4Bytes[ 0..3 ]
) সর্বদা একই থাকে। একমাত্র জিনিসটি পরিবর্তিত হয় তা হল আমরা কীভাবে তাদের ব্যাখ্যা করি।
আবার, আমরা সিস্টেমকে বলি কিভাবে প্রকারের মাধ্যমে তাদের ব্যাখ্যা করা যায় ।
উদাহরণস্বরূপ, উপরে আমরা l_Just4Bytes
অ্যারের বিষয়বস্তু ব্যাখ্যা করতে নিম্নলিখিত ধরণের ব্যবহার করেছি
unsigned char
: প্লেইন বাইনারি 1 বাইট
signed char
: 2 এর পরিপূরক 1 বাইট
unsigned short
: সাধারণ বাইনারি স্বরলিপি 2 বাইট
short
: 2 এর পরিপূরক 2 বাইট
unsigned int
: সাধারণ বাইনারি স্বরলিপি 4 বাইট
int
: 2 এর পরিপূরক 4 বাইট
float
: আইইইই 754 একক নির্ভুলতার স্বরলিপিতে 4 বাইট
[সম্পাদনা] ব্যবহারকারী 4581301 দ্বারা মন্তব্য করার পরে এই পোস্টটি সম্পাদনা করা হয়েছে। এই কয়েকটি সহায়ক লাইন ফেলে দেওয়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ!