it-swarm.asia

ما هو الفرق بين uint16_t و int incut قصيرة غير موقعة من معالج 64 بت؟

جئت لاستخدام متغير من النوع uint16_t ، لكنني غير قادر على استخدام نوع البيانات هذا بسبب قيود مشروعي. هل من الممكن ان unsigned short int بدلا من uint16_t؟ أنا لا أعرف الفرق بينهما. يمكن لأي شخص توضيح من فضلك؟

26
Chinna

uint16_t غير عدد صحيح 16 بت.

unsigned short int عدد صحيح قصير غير موقّع ، لكن الحجم يعتمد على التطبيق. يقول المعيار فقط إنه 16 بت على الأقل (أي ، الحد الأدنى لقيمة UINT_MAX هو 65535). في الممارسة العملية ، عادة ما يكون 16 بت ، لكن لا يمكنك أن تأخذ ذلك مضمونًا.

ملحوظة:

  1. إذا كنت تريد عددًا صحيحًا من الأجهزة المحمولة غير الموقعة 16 بت ، فاستخدم uint16_t.
  2. inttypes.h و stdint.h كلاهما قدم في C99. إذا كنت تستخدم C89 ، حدد نوعك الخاص.
  3. uint16_t قد لا يتم توفيرها في تنفيذ معين (انظر المرجع أدناه) ، ولكن unsigned short int متاح دائما.

المرجع: C11 (ISO/IEC 9899: 201x) §7.20 أنواع عدد صحيح

لكل نوع من الموصوفة هنا التي يوفرها التنفيذ) يجب أن يعلن اسم typedef ويحدد وحدات الماكرو المرتبطة. على العكس من ذلك ، بالنسبة لكل نوع موصوف هنا لا يوفره التنفيذ ، يجب ألا يعلن اسم typedef ولا يحدد وحدات الماكرو المرتبطة. يجب أن يوفر التنفيذ الأنواع الموصوفة على أنها "مطلوبة" ، ولكن لا يلزم تقديم أي من الأنواع الأخرى (الموصوفة بأنها "اختيارية").

44
Yu Hao

uint16_t مضمون ليكون عددًا صحيحًا غير موقَّع يبلغ عرضه 16 بت

unsigned short int مضمون ليكون غير موقع short integer ، حيث يتم تعريف short integer بواسطة المترجم (وربما أعلام المترجم) الذي تستخدمه حاليا. بالنسبة لمعظم برامج التحويل البرمجي للأجهزة x86 ، يكون short integer أكبر من 16 بت.

لاحظ أيضًا أنه لكل معيار ANSI C يتم تحديد الحد الأدنى للحجم وهو 16 بت فقط ، والحد الأقصى للحجم متروك لمطور برنامج التحويل البرمجي

حدود النوع الأدنى

يجب أن يحترم أي مترجم يتوافق مع المعيار الحدود التالية فيما يتعلق بنطاق القيم التي قد يقبلها أي نوع معين. لاحظ أن هذه الحدود الدنيا: التنفيذ مجاني لتجاوز أي أو كل هذه. لاحظ أيضًا أن الحد الأدنى لنطاق char يعتمد على ما إذا كان char يتم توقيعه أو عدم توقيعه.

اكتب الحد الأدنى للنطاق

signed char     -127 to +127
unsigned char      0 to 255
short int     -32767 to +32767
unsigned short int 0 to 65535
19
Scott Chamberlain