CHAR_BIT কী?


93

Http://graphics.stanford.edu/~seender/bithacks.html থেকে শাখা ছাড়াই পূর্ণসংখ্যার পরম মান (অ্যাবস) গণনার জন্য কোড উদ্ধৃত করা :

পেটেন্ট বৈচিত্র:

এটি কী CHAR_BITএবং কীভাবে এটি ব্যবহার করবেন?

উত্তর:


0

আপনার সচেতন হওয়া উচিত যে এই কোডটি স্বাক্ষরিত ধরণের উপরের ডান বিটশিটের বাস্তবায়ন-সংজ্ঞায়িত আচরণের উপর নির্ভর করে। জিসিসি সর্বদা বুদ্ধিমান আচরণ (সাইন-বিট-এক্সটেনশন) দেওয়ার প্রতিশ্রুতি দেয় তবে আইএসও সি বাস্তবায়নের উপরের বিটগুলি শূন্যে পূরণ করতে দেয়।

এই সমস্যাটির চারপাশের একটি উপায়:

আপনার Makefileবা config.hইত্যাদি HAVE_SIGN_EXTENDING_BITSHIFTআপনার প্ল্যাটফর্মের উপর নির্ভর করে নির্মানের সময় সংজ্ঞা দিতে পারে।


124
এটি খুব মজাদার মন্তব্য হওয়া সত্ত্বেও, এটি কীভাবে গ্রহণযোগ্য উত্তর হতে পারে কারণ এটি প্রশ্নের উত্তর দেয় না।
qdii

16
@ মরিস: কেউ প্রশ্ন সম্পাদনা করেছেন এবং একটি উপ-প্রশ্নকে প্রশ্নের শিরোনামে উন্নীত করেছেন। মূল শিরোনামটি স্বীকার করা হয়েছিল যে ভয়াবহ ছিল, তবে ওপি-র প্রশ্ন ছিল উদ্ধৃত বিট হ্যাক কোডটি কীভাবে কাজ করে, এবং "এটি কমপক্ষে বহনযোগ্য নয়, এবং কেন এখানে রয়েছে" একটি দরকারী উত্তর।
আর .. গীটহাব বন্ধ হেল্পিং আইসিসি

12
আহ আমি বুঝতে পেরেছি. দুঃখের বিষয়, এই প্রশ্নটি "কী কী CHAR_BIT?" এর জন্য গুগল অনুসন্ধান ফলাফলগুলিতে খুব বেশি উপরে দেখায় ? এমনকি, যদিও এটি মূল প্রশ্ন ছিল না। :( আপনার ব্যাখ্যাটি দেওয়াতে, আমি বুঝতে পেরেছি কেন আপনি এই উত্তরটি লিখেছিলেন তবে উত্তরসূরির জন্য এটি উভয়ই কার্যকর হতে পারে (ক) আপনার উত্তরটি সরিয়ে প্রশ্নটির একটি মন্তব্য হিসাবে এটি পুনরায় লেখার জন্য, যাতে @ আরাকের উপরে প্রদর্শিত হয়, বা (খ) আপনার উত্তরটি সম্পাদনা করুন যাতে এটি প্রশ্নের বর্তমান শিরোনামের জবাব দেয়
লিন

4
ওপি-র মূল প্রশ্ন এবং সম্পাদক এর ব্যাখ্যার মধ্যে অভিপ্রায় (গুলি) এর পার্থক্যের কারণে, এটি প্রদর্শিত হয় যেন মূল অনুরোধের প্রকৃতি অনিচ্ছাকৃতভাবে স্থানান্তরিত হয়েছিল। উভয় প্রশ্নের (মূল এবং সম্পাদিত) যোগ্যতা থাকা সত্ত্বেও, এই বৈষম্যটি বিবেচনা করা দরকার। আমি এখন জিজ্ঞাসা করছি: এই উত্তরটি কোনও উইকে যুক্ত করা যাবে? এটি সম্ভবত এমন লোকদের সহায়তা করবে যারা এই ধরণের তথ্যের সন্ধান করছেন, যদিও এটি মূল প্রশ্নের সাথে সম্পর্কিত নয়। এর পরে, ডেটো দাতুশভিলির মূল অনুরোধটি ফিট করার জন্য, প্রশ্নটি আবার সম্পাদনা করা যেতে পারে। কেবলমাত্র সংশ্লিষ্ট পাঠক ...

4
আমি এই প্রশ্নের ইতিহাস দেখেছি এবং মূল প্রশ্নটি কোডটি কীভাবে কাজ করে তা আসলে কোথাও জিজ্ঞাসা করে না। সম্পাদক শিরোনামে প্রচারিত প্রশ্নটি সেখানে কেবলমাত্র আসল প্রশ্ন।
প্লাগওয়াশ

230

CHAR_BITবিট সংখ্যা char। আজকাল, প্রায় সমস্ত আর্কিটেকচারে বাইট প্রতি 8 বিট ব্যবহার করা হয় তবে এটি সর্বদা হয় না। কিছু পুরানো মেশিনে 7-বিট বাইট থাকত।

এটি পাওয়া যাবে <limits.h>


4
কিছু ডিএসপিতে 10 বা ততোধিক বিট-বাইট থাকে।
জুলি রবল

65
সি CHAR_BIT>=8ডিএসপিগুলির জন্য অনেকগুলি বৃহত্তর মানগুলির প্রয়োজন এবং অনুমতি দেয় যা কেবলমাত্র একক আকারের, প্রায়শই 32 বিট। পসিক্সের প্রয়োজন CHAR_BIT==8। সাধারণভাবে, আপনি যে কোনও মাল্টি-ইউজার / মাল্টিটাস্কিং সার্ভার-ভিত্তিক বা ইন্টারেক্টিভ-ব্যবহার-ভিত্তিক আর্কিটেকচারটি ইন্টারনেটের সাথে সংযুক্ত হওয়ার বা বাইরের বিশ্বের সাথে টেক্সচুয়াল ডেটা বিনিময়ের যে কোনও সম্ভাবনা রয়েছে বলে ধরে নিতে পারেন CHAR_BIT==8
আর .. গীটহাব বন্ধ করুন ICE

6
@ ক্যাফ: না, এটি হ'ল সি 99 এর প্রকারগুলি প্রয়োজন int8_tএবং uint8_tবিদ্যমান থাকে। এভাবে অস্তিত্ব আছে প্রস্থ 8. এক ধরনের যেহেতু sizeofকোনো ধরনের সঙ্গে সামঞ্জস্যপূর্ণ হতে হবে sizeof charআসলে sizeof int8_tহওয়া আবশ্যক 1. সুতরাং CHAR_BIT == 8। আমি এই শ্রদ্ধার চারপাশে এখানে কিছু লিখেছি: gustedt.wordpress.com/2010/06/01/how-many-BS-has-a-byte
জেনস গুস্টেট

22
@ জেনস গুস্টেট: দয়া করে C99 টি অনুচ্ছেদে একটি বিভাগ উল্লেখ করুন। সঠিক-প্রস্থের পূর্ণসংখ্যার ধরণের মধ্যে, C99 স্পেস বলছে "এই ধরণেরগুলি alচ্ছিক" " (7.18.1.1/3) তবে সর্বনিম্ন-প্রস্থ এবং দ্রুততম প্রস্থের ধরণের প্রয়োজন।
জেমসডলিন

4
@ জামেসডলিন এবং ক্যাফ: দুঃখিত আমি জিনিসগুলি মিশ্রিত করেছি। হ্যাঁ আমি যে প্রয়োজনীয়তার বিষয়ে উল্লেখ করেছি তা পসিক্স থেকে আসে stdint.h। সুতরাং সেখানে এটি প্রয়োজনীয় এবং এটি স্ট্যান্ডার্ডের কোনও নির্দিষ্ট সংস্করণ উল্লেখ না করে এটি আইএসও সি স্ট্যান্ডার্ডের এক্সটেনশন হিসাবে চিহ্নিত হয়েছে । আমার খারাপ।
জেনস গুস্ট্ট

2

আসল প্রশ্ন (CHAR_BIT কী) এবং মূল প্রশ্নে অন্তর্নিহিত প্রশ্ন (এটি কীভাবে কাজ করে) উভয়ের উত্তর দেওয়ার চেষ্টা করছি।


সি এবং সি ++ এ একটি চর সি প্রোগ্রামার যে ঠিকানাটি বলতে পারে তার ক্ষুদ্রতম একককে প্রতিনিধিত্ব করে *

সি এবং সি ++ এ CHAR_BIT একটি চরে বিটের সংখ্যা উপস্থাপন করে। চরের ধরণের অন্যান্য প্রয়োজনীয়তার কারণে এটি সর্বদা কমপক্ষে 8 হওয়া উচিত। সমস্ত আধুনিক সাধারণ উদ্দেশ্যে কম্পিউটারে অনুশীলনে এটি ঠিক 8 তবে কিছু historicতিহাসিক বা বিশেষজ্ঞ সিস্টেমে উচ্চতর মান থাকতে পারে।

জাভার CHAR_BIT বা আকারের কোনও সামঞ্জস্য নেই, জাভাতে সমস্ত আদিম ধরণের স্থির আকার এবং বস্তুর অভ্যন্তরীণ কাঠামো প্রোগ্রামারের কাছে অস্বচ্ছ। যদি এই কোডটি জাভাতে অনুবাদ করা হয় তবে আপনি কেবল স্থির মান 31 দ্বারা "আকারের (int) * CHAR_BIT - 1" প্রতিস্থাপন করতে পারেন।

এই নির্দিষ্ট কোডে এটি কোন int এর বিটের সংখ্যা গণনা করতে ব্যবহৃত হচ্ছে। সচেতন থাকুন যে এই গণনাটি ধরে নিয়েছে যে ইনট টাইপটিতে কোনও প্যাডিং বিট নেই।

আপনার সংকলক স্বাক্ষরযুক্ত সংখ্যার বিট শিফটে প্রসারিত করতে সাইন ইন করতে বেছে নিয়েছে এবং ধরে নিলে আপনার সিস্টেমটি নেতিবাচক সংখ্যার জন্য 2 এস পরিপূরক উপস্থাপনা ব্যবহার করে এর অর্থ হ'ল "এমএএসকে" ইতিবাচক বা শূন্য মানের জন্য 0 হবে এবং নেতিবাচক মানের জন্য -1 হবে।

দ্বিগুণ পরিপূরক সংখ্যাটিকে প্রত্যাখ্যান করার জন্য আমাদের কিছুটা পারফরম্যান্স করা উচিত নয় এবং তারপরে একটি যুক্ত করতে হবে। সমানভাবে আমরা একটিকে বিয়োগ করতে পারি এবং তারপরে কিছুটা হলেও এটিকে উপেক্ষা করতে পারি।

আবার ধরে নিই যে দ্বিগুণ পরিপূরক প্রতিনিধিত্ব -1 সকলের দ্বারা প্রতিনিধিত্ব করা হয়, তাই একচেটিয়া বা -1 সহ বিটওয়াইজ অবহেলা করার সমতুল্য।

সুতরাং যখন ভি শূন্য হয় তখন সংখ্যাটি একা থাকে, যখন ভি এক হয় তবে তা উপেক্ষিত হয়।

সচেতন হওয়ার মতো কিছু হ'ল সি এবং সি ++ এ স্বাক্ষরিত ওভারফ্লো হ'ল অপরিজ্ঞাত আচরণ। সুতরাং সবচেয়ে নেতিবাচক মান এই ABS বাস্তবায়ন ব্যবহার অনির্ধারিত আচরণ বাড়ে। ক্যাসেট যুক্ত করে এটি ঠিক করা যায় যে প্রোগ্রামটির চূড়ান্ত লাইনটি স্বাক্ষরবিহীন ইন্টে মূল্যায়ন করা হয়।

* যা হার্ডওয়্যারটি সম্বোধন করতে পারে মেমরির ক্ষুদ্রতম ইউনিটের মতো যা সাধারণত তবে সংক্ষিপ্তভাবে নয়। একটি বাস্তবায়ন সম্ভাব্যভাবে হার্ডওয়্যার-ঠিকানাযোগ্য মেমরির একাধিক ইউনিটকে প্রোগ্রাম-ঠিকানাযোগ্য মেমরির এক ইউনিটে একত্রিত করতে পারে বা হার্ডওয়্যার অ্যাড্রেসযোগ্য মেমরির এক ইউনিটকে প্রোগ্রাম-অ্যাড্রেসযোগ্য মেমরির একাধিক ইউনিটে বিভক্ত করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.