সাইজ_টি এবং স্বাক্ষরবিহীন ইন্টের মধ্যে পার্থক্য?


107

আমি তাই সম্পর্কে বিভ্রান্ত size_t। আমি ইন্টারনেটে অনুসন্ধান করেছি এবং সর্বত্র উল্লেখ করেছি যে size_tএটি একটি স্বাক্ষরযুক্ত প্রকার, তাই এটি কেবল অ-নেতিবাচক মানগুলিকেই উপস্থাপন করতে পারে।

আমার প্রথম প্রশ্নটি: এটি যদি কেবল অ-নেতিবাচক মানগুলির প্রতিনিধিত্ব করতে ব্যবহৃত হয় তবে আমরা এর unsigned intপরিবর্তে কেন ব্যবহার করব না size_t?

আমার দ্বিতীয় প্রশ্নটি হল: size_tএবং unsigned intবিনিময়যোগ্য বা না? তা না হলে কেন?

এবং কেউ কি আমাকে size_tএর কাজকর্মের একটি ভাল উদাহরণ দিতে পারেন ?


5
typedef /*This part is implementation dependent */ size_t;
P0W

উত্তর:


87

যদি এটি অ-নেতিবাচক মান উপস্থাপন করতে ব্যবহার করা হয় তবে আমরা এর unsigned intপরিবর্তে কেন ব্যবহার করব নাsize_t

কারণ unsigned intএকমাত্র স্বাক্ষরবিহীন পূর্ণসংখ্যার টাইপ নয়। size_tকোন কিছু হতে পারে unsigned char, unsigned short, unsigned int, unsigned longবা unsigned long long, বাস্তবায়ন উপর নির্ভর করে।

দ্বিতীয় প্রশ্নটি হ'ল size_tএবং unsigned intআদান-প্রদানযোগ্য বা না হয় এবং যদি না হয় তবে কেন?

উপরে বর্ণিত কারণে এগুলি বিনিময়যোগ্য নয় ^^

এবং কেউ কি আমাকে সাইজ_টি এবং এর সংক্ষিপ্ত কাজের একটি ভাল উদাহরণ দিতে পারেন?

"এর সংক্ষিপ্ত কাজ" বলতে আপনি কী বোঝাতে চেয়েছেন তা আমি পুরোপুরি পাই না। এটি অন্য যে কোনও স্বাক্ষরবিহীন প্রকারের মতো কাজ করে (বিশেষত, এটি টাইপযুক্ত টাইপের মতো)। আপনি size_tযখন কোনও বস্তুর আকার বর্ণনা করছেন তখন আপনাকে ব্যবহার করতে উত্সাহিত করা হবে । বিশেষত, sizeofঅপারেটর এবং বিভিন্ন স্ট্যান্ডার্ড লাইব্রেরি ফাংশন, যেমন strlen(), রিটার্ন size_t

বোনাস: (এবং ঘনিষ্ঠভাবে সম্পর্কিত ধরণের) সম্পর্কে এখানে একটি ভাল নিবন্ধ । আপনার এটি কেন ব্যবহার করা উচিত এটি খুব ভাল কারণগুলির কারণ।size_tptrdiff_t


1
ঠিক কীভাবে হতে size_tপারে unsigned char? এটি কি অনুমোদিত যে স্ট্যান্ডার্ডে এটি অনুমোদিত? আমি এই ধারণার সাথে বোঝাতে চাইছি যে কেউ কীভাবে calloc()(এবং পরিবার) strlen()ইত্যাদি ব্যবহারের আশা করা যায় ? এটা আমার কাছে অযৌক্তিক মনে হচ্ছে।
প্রাইফটান

আমি মনে করি size_tমান একটি "স্বাক্ষরবিহীন পূর্ণসংখ্যা প্রকার" হতে সংজ্ঞায়িত করা হয়, কিন্তু কোন হিসাবে একই হতে এটা প্রয়োজন হয় না unsigned {char, short, int, long, long long}
পল হানকিন

80

সিতে 5 টি স্বাক্ষরযুক্ত স্বাক্ষরযুক্ত পূর্ণসংখ্যার প্রকার রয়েছে:

  • unsigned char
  • unsigned short
  • unsigned int
  • unsigned long
  • unsigned long long

তাদের আকার এবং ব্যাপ্তির জন্য বিভিন্ন প্রয়োজনীয়তার সাথে (সংক্ষেপে বলা যায়, প্রতিটি ধরণের পরিসর হ'ল পরবর্তী ধরণের পরিসরের একটি উপসেট, তবে তাদের কারও কারও মধ্যে একই সীমা থাকতে পারে)।

size_ttypedefকিছু স্বাক্ষরবিহীন প্রকারের জন্য একটি (অর্থাত্ একটি উপনাম), (সম্ভবত উপরের একটি হলেও সম্ভবত একটি) বর্ধিত স্বাক্ষরযুক্ত পূর্ণসংখ্যার প্রকার , যদিও এর সম্ভাবনা কম)। এটি sizeofঅপারেটর দ্বারা উত্পাদিত প্রকার ।

একটি সিস্টেমে, unsigned intআকারগুলি উপস্থাপন করতে এটি বোধগম্য হতে পারে ; অন্যটি, এটি ব্যবহার করতে আরও অর্থবোধ করতে পারে unsigned longবা unsigned long long। (size_t হয় unsigned charবা হওয়ার সম্ভাবনা কম unsigned short, তবে এটি অনুমোদিত)।

উদ্দেশ্যে size_t সম্পর্কে চিন্তা করা থেকে প্রোগ্রামার উপশম হয় যা পূর্বনির্ধারিত ধরনের মাপ প্রতিনিধিত্ব করতে ব্যবহৃত হয়।

এমন sizeofএকটি কোড যা ফলন করে unsigned intএমনটি বহনযোগ্য নয় umes যে কোডটি ধরে নিয়েছে এটির ফলনযোগ্য size_tহওয়ার সম্ভাবনা বেশি।


6
আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি আপনাকে
আকার_

@ কিথ Thompson, তাই অর্থ কি এই যে নির্দিষ্ট ধরনের (যেমন করে unsigned int, unsigned longইত্যাদি) যে size_tঅনুরূপ মেশিন উপর নির্ভর করে যার উপর কোড রান করা হয়? অর্থাত্ একটি মেশিন আর্কিটেকচারের সাথে এটি মিলছে unsigned intতবে অন্য কোনও স্থাপত্যের সাথে এটি মিলবে unsigned long, ইত্যাদি?
রিচি থমাস

1
@ রিচি থমাস: এটি সি বাস্তবায়নের উপর নির্ভর করে। একই আর্কিটেকচারে দুটি পৃথক সংকলক বিভিন্ন ধরণের জন্য চয়ন করতে পারে size_t, বিশেষত, উদাহরণস্বরূপ, unsigned longএবং unsigned long longযদি একই আকার হয়।
কিথ থম্পসন

@ রিচি থমাস এটিও এরই একটি অংশ। অর্থাৎ যে সর্বোচ্চ long, long longআপনি কটাক্ষপাত যদি হয়: ইত্যাদি সিস্টেম উপর নির্ভর করে না limits.hআপনি অন্তত অধীনে Unices দেখতে হবে যে ints জন্য সর্বোচ্চ মান সিস্টেমের শব্দ আকারের উপর নির্ভর করে।
প্রাইফটান

1
@ প্রিফটান মোটোরোলা 68000 সিরিজটি দেখুন, পুরানো ইন্টেল x86 সিরিজটিও দেখুন (৮০৮৮ এবং ৮০৮৮ এ ফিরে যাচ্ছেন)।
কিথ থম্পসন

10

size_t একটি নির্দিষ্ট সীমাবদ্ধতা আছে।

Http://www.cplusplus.com/references/cstring/size_t/ থেকে উদ্ধৃতি :

মৌলিক স্বাক্ষরবিহীন পূর্ণসংখ্যার ধরণের একের নাম।

এটি কোনও প্রকারের আকারের বাইটগুলিতে প্রতিনিধিত্ব করতে সক্ষম : সাইজ_টি হ'ল আকার যা অপারেটর ফিরিয়ে দেয় এবং স্ট্যান্ডার্ড লাইব্রেরিতে আকার এবং গণনা উপস্থাপনে ব্যাপকভাবে ব্যবহৃত হয়।

এটি এর সাথে বিনিময়যোগ্য নয় unsigned intকারণ এর আকারটি intডেটা মডেল দ্বারা নির্দিষ্ট করা হয়। উদাহরণস্বরূপ, এলএলপি int64 একটি 32-বিট এবং আইএলপি 64 একটি 64-বিট ব্যবহার করে int


5
সেই উদ্ধৃতিটি কোথা থেকে এসেছে? (এটি সি স্ট্যান্ডার্ড থেকে নয়))
কেইথ থম্পসন

2
প্রশ্ন ট্যাগ করা হয় । সি ++ স্ট্যান্ডার্ডটির সি
IInspectable

7

সাইজ_টি ডেটা অবজেক্টের আকার মজুত করতে ব্যবহৃত হয় এবং নির্দিষ্ট সি প্রয়োগকারী যে কোনও ডেটা অবজেক্টের আকার ধারণ করতে সক্ষম হওয়ার গ্যারান্টিযুক্ত। এই ডেটা টাইপটি ছোট (বিটের সংখ্যায়), বড় বা হস্তাক্ষরযুক্ত ইন্টের মতো একই হতে পারে।


4

অন্যান্য উত্তরগুলি ছাড়াও এটি কোডটির নথিও দেয় এবং লোকদের বলে দেয় যে আপনি মেমরির আকারের অবজেক্টের কথা বলছেন


ভাল যুক্তি. একটি appleএকটি আপেল , size_tএটি একটি আকার ...
dom_beau

2

সাইজ_টি টাইপ সি / সি ++ ভাষার একটি বেস স্বাক্ষরযুক্ত পূর্ণসংখ্যার প্রকার। এটি আকারের অপারেটর দ্বারা প্রাপ্ত ফলাফলের ধরণ। ধরণের আকারটি বেছে নেওয়া হয়েছে যাতে এটি কোনও প্রকারের তাত্ত্বিকভাবে সম্ভাব্য অ্যারের সর্বাধিক আকার সঞ্চয় করতে পারে। একটি 32-বিট সিস্টেমে আকার_t 32-বিট, একটি 64- বিট এক 64 বিট নেবে। অন্য কথায়, আকার_t টাইপের একটি পরিবর্তনশীল নিরাপদে একটি পয়েন্টার সঞ্চয় করতে পারে। ব্যতিক্রম শ্রেণি ফাংশনে নির্দেশক তবে এটি একটি বিশেষ ক্ষেত্রে। যদিও সাইজ_টি একটি পয়েন্টার সঞ্চয় করতে পারে, সেই উদ্দেশ্যে অন্য স্বাক্ষরযুক্ত ইন্টিজার টাইপ uintptr_t ব্যবহার করা ভাল (এটির নামটির সক্ষমতা প্রতিফলিত করে)। আকার_t এবং uintptr_t প্রকার প্রতিশব্দ। সাইজ_টি টাইপ সাধারণত লুপ কাউন্টার, অ্যারে ইনডেক্সিং এবং অ্যাড্রেস গণিতের জন্য ব্যবহৃত হয়। আকারের আকারের সর্বোচ্চ সম্ভাব্য মান ধ্রুবক SIZE_MAX।


1
size_tযে কোনও একক বস্তুর আকার সংরক্ষণ করতে পারে। একটি পয়েন্টার যে কোনও বস্তুর যে কোনও বাইটকে নির্দেশ করতে পারে। উদাহরণস্বরূপ, একটি 64-বিট অ্যাড্রেস স্পেস সহ আপনার একটি সিস্টেম থাকতে পারে যা কোনও একটি অবজেক্টের আকার 2 ** 32-1 বাইটের মধ্যে সীমাবদ্ধ করে। কোনও ধরণের গ্যারান্টি নেই size_tএবং uintptr_tএটি একই ধরণের।
কিথ থম্পসন

1

সাধারণ কথায় সাইজ_টি প্ল্যাটফর্ম এবং পাশাপাশি বাস্তবায়ন নির্ভর যেখানে স্বাক্ষরযুক্ত ইন্ট কেবল প্ল্যাটফর্ম নির্ভর।

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