আসল প্রশ্ন (CHAR_BIT কী) এবং মূল প্রশ্নে অন্তর্নিহিত প্রশ্ন (এটি কীভাবে কাজ করে) উভয়ের উত্তর দেওয়ার চেষ্টা করছি।
সি এবং সি ++ এ একটি চর সি প্রোগ্রামার যে ঠিকানাটি বলতে পারে তার ক্ষুদ্রতম একককে প্রতিনিধিত্ব করে *
সি এবং সি ++ এ CHAR_BIT একটি চরে বিটের সংখ্যা উপস্থাপন করে। চরের ধরণের অন্যান্য প্রয়োজনীয়তার কারণে এটি সর্বদা কমপক্ষে 8 হওয়া উচিত। সমস্ত আধুনিক সাধারণ উদ্দেশ্যে কম্পিউটারে অনুশীলনে এটি ঠিক 8 তবে কিছু historicতিহাসিক বা বিশেষজ্ঞ সিস্টেমে উচ্চতর মান থাকতে পারে।
জাভার CHAR_BIT বা আকারের কোনও সামঞ্জস্য নেই, জাভাতে সমস্ত আদিম ধরণের স্থির আকার এবং বস্তুর অভ্যন্তরীণ কাঠামো প্রোগ্রামারের কাছে অস্বচ্ছ। যদি এই কোডটি জাভাতে অনুবাদ করা হয় তবে আপনি কেবল স্থির মান 31 দ্বারা "আকারের (int) * CHAR_BIT - 1" প্রতিস্থাপন করতে পারেন।
এই নির্দিষ্ট কোডে এটি কোন int এর বিটের সংখ্যা গণনা করতে ব্যবহৃত হচ্ছে। সচেতন থাকুন যে এই গণনাটি ধরে নিয়েছে যে ইনট টাইপটিতে কোনও প্যাডিং বিট নেই।
আপনার সংকলক স্বাক্ষরযুক্ত সংখ্যার বিট শিফটে প্রসারিত করতে সাইন ইন করতে বেছে নিয়েছে এবং ধরে নিলে আপনার সিস্টেমটি নেতিবাচক সংখ্যার জন্য 2 এস পরিপূরক উপস্থাপনা ব্যবহার করে এর অর্থ হ'ল "এমএএসকে" ইতিবাচক বা শূন্য মানের জন্য 0 হবে এবং নেতিবাচক মানের জন্য -1 হবে।
দ্বিগুণ পরিপূরক সংখ্যাটিকে প্রত্যাখ্যান করার জন্য আমাদের কিছুটা পারফরম্যান্স করা উচিত নয় এবং তারপরে একটি যুক্ত করতে হবে। সমানভাবে আমরা একটিকে বিয়োগ করতে পারি এবং তারপরে কিছুটা হলেও এটিকে উপেক্ষা করতে পারি।
আবার ধরে নিই যে দ্বিগুণ পরিপূরক প্রতিনিধিত্ব -1 সকলের দ্বারা প্রতিনিধিত্ব করা হয়, তাই একচেটিয়া বা -1 সহ বিটওয়াইজ অবহেলা করার সমতুল্য।
সুতরাং যখন ভি শূন্য হয় তখন সংখ্যাটি একা থাকে, যখন ভি এক হয় তবে তা উপেক্ষিত হয়।
সচেতন হওয়ার মতো কিছু হ'ল সি এবং সি ++ এ স্বাক্ষরিত ওভারফ্লো হ'ল অপরিজ্ঞাত আচরণ। সুতরাং সবচেয়ে নেতিবাচক মান এই ABS বাস্তবায়ন ব্যবহার অনির্ধারিত আচরণ বাড়ে। ক্যাসেট যুক্ত করে এটি ঠিক করা যায় যে প্রোগ্রামটির চূড়ান্ত লাইনটি স্বাক্ষরবিহীন ইন্টে মূল্যায়ন করা হয়।
* যা হার্ডওয়্যারটি সম্বোধন করতে পারে মেমরির ক্ষুদ্রতম ইউনিটের মতো যা সাধারণত তবে সংক্ষিপ্তভাবে নয়। একটি বাস্তবায়ন সম্ভাব্যভাবে হার্ডওয়্যার-ঠিকানাযোগ্য মেমরির একাধিক ইউনিটকে প্রোগ্রাম-ঠিকানাযোগ্য মেমরির এক ইউনিটে একত্রিত করতে পারে বা হার্ডওয়্যার অ্যাড্রেসযোগ্য মেমরির এক ইউনিটকে প্রোগ্রাম-অ্যাড্রেসযোগ্য মেমরির একাধিক ইউনিটে বিভক্ত করতে পারে।