سؤال

هذا هو ذات الصلة إلى المسألة التالية ،

كيفية تعريف عدد صحيح 32-بت في ج

العديد من الناس ذكر الباحث دائما 32-بت على معظم المنصات.أنا الغريب إذا كان هذا صحيحا.

هل تعرف أي المنصات الحديثة مع الباحث مختلفة الحجم ؟ تجاهل ديناصور منصات مع 8 بت أو 16-بت أبنية.

ملاحظة: كنت تعرف مسبقا كيفية تعريف عدد صحيح 32-بت من سؤال آخر.هذا هو واحد أكثر مثل دراسة استقصائية لمعرفة أي منصات (وحدة المعالجة المركزية/OS/المترجم) دعم الأعداد الصحيحة مع أحجام أخرى.

هل كانت مفيدة؟

المحلول

كما العديد من الناس وقد ذكر, لا توجد ضمانات أن 'int' سوف يكون 32 بت, إذا كنت ترغب في استخدام المتغيرات من حجم معين ، لا سيما عند كتابة التعليمات البرمجية التي ينطوي بت معالجات, يجب عليك استخدام معيار عدد أنواع' بتكليف من c99 المواصفات.

int8_t
uint8_t
int32_t
uint32_t

الخ...

وهم عموما من شكل [u]intN_t ، حيث 'u' تحديد أنك تريد غير موقعة الكمية ، و N هو عدد البتات

الصحيح typedefs هذه ينبغي أن تكون متاحة في stdint.ساعة على منصة أيهما أنت تجميع باستخدام هذه يسمح لك لكتابة لطيفة, المحمولة code :-)

نصائح أخرى

"هو دائما 32 بت على معظم منصات" ما هو الخطأ مع هذا مقتطف?:-)

C القياسية لا ولاية أحجام العديد من جزءا لا يتجزأ من أنواع.ذلك لا ولاية الأحجام النسبية ، على سبيل المثال ، sizeof(int) >= sizeof(short) وهلم جرا.كما ولايات الحد الأدنى يتراوح ولكن يسمح لعدة أنظمة تشفير (المتمم, منها تكمل و علامة/حجم).

إذا كنت تريد محدد الحجم متغير, تحتاج إلى استخدام واحد مناسبة منصة كنت تعمل على ، مثل استخدام #ifdef's شيئا مثل:

#ifdef LONG_IS_32BITS
    typedef long int32;
#else
    #ifdef INT_IS_32BITS
        typedef int int32;
    #else
        #error No 32-bit data type available
    #endif
#endif

بدلا من ذلك, C99 وما فوق يسمح الدقيق عرض عدد أنواع intN_t و uintN_t:


  1. على typedef اسم intN_t يعين صحيح وقعت نوع مع العرض N, لا الحشو بت و المتمم التمثيل.وهكذا ، int8_t يدل صحيح وقعت نوع مع عرض بالضبط 8 بت.
  2. على typedef اسم uintN_t يعين صحيح غير الموقعة نوع مع العرض N.وهكذا ، uint24_t يدل صحيح غير الموقعة نوع مع عرض بالضبط 24 بت.
  3. هذه الأنواع هي اختيارية.ومع ذلك ، إذا تم تنفيذ توفر عدد صحيح مع أنواع الاعراض من 8 ، 16 ، 32 أو 64 بت ، أي الحشو بت ، و (من أجل توقيع أنواع) أن يكون اثنين من تتمة التمثيل ، فإنه يجب تحديد المقابلة typedef أسماء.

في هذه اللحظة في الوقت المناسب ، معظم سطح المكتب و منصات الخادم استخدام 32 بت الاعداد الصحيحه ، بل جزءا لا يتجزأ من العديد من المنصات (أعتقد المحمولة ذراع أو x86) استخدام 32 بت ints.للوصول إلى 16-بت int لديك للحصول على صغيرة جدا في الواقع:أعتقد أن "بيركلي قذى" أو بعض من أصغر اتميل Atmega رقائق.ولكن كانت هناك.

لا.الصغيرة جزءا لا يتجزأ من استخدام أنظمة 16 بت الاعداد الصحيحه.

فإنه إلى حد كبير يعتمد على مترجم.ترجمة بعض منهم 64 بت على 64 بت الآلات ، ترجمة بعض لهم 32-بت.جزءا لا يتجزأ من الأنظمة الخاصة بهم قليلا الكرة خاصة من الشمع.

أفضل شيء يمكنك القيام به للتحقق:

printf("%d\n", sizeof(int));

علما بأن sizeof سوف طباعة بايت.هل sizeof(int)*CHAR_BIT للحصول على البتات.

كود لطباعة عدد البتات لمختلف أنواع:

#include <limits.h>
#include <stdio.h>

int main(void) {
    printf("short is %d bits\n",     CHAR_BIT * sizeof( short )   );
    printf("int is %d bits\n",       CHAR_BIT * sizeof( int  )    );
    printf("long is %d bits\n",      CHAR_BIT * sizeof( long )    );
    printf("long long is %d bits\n", CHAR_BIT * sizeof(long long) );
    return 0;
}

حسنا معظم الذراع القائمة على المعالجات يمكن تشغيل الإبهام ، وهو عبارة عن 16 بت.ويشمل ذلك حتى الآن-فقط-يشاع أجهزة الكمبيوتر المحمولة الروبوت و نزيف الحافة الهواتف الذكية.

أيضا, بعض الآلات الحاسبة الرسوم البيانية باستخدام 8 بت معالجات, وأنا أدعو هؤلاء إلى حد ما الحديث كذلك.

TI لا تزال بيع OMAP لوحات مع C55x DSPs عليها ، تستخدم في المقام الأول من أجل فك تشفير الفيديو.أعتقد الموردة مترجم لهذا 16 بت الباحث.فإنه يكاد يكون من الديناصورات (نوكيا 770 صدر في عام 2005) ، على الرغم من أن يمكنك الحصول على 32 بت DSPs.

معظم رمز الكتابة ، يمكنك الافتراض أنه لن يكون من أي وقت مضى تشغيل على DSP.ولكن ربما ليس كل شيء.

إذا كنت مهتما أيضا في الفعلية ماكس/دقيقة القيمة بدلا من عدد من البتات ، حدود.ح يحتوي على كل شيء تقريبا كنت تريد أن تعرف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top