سؤال

لقد رأيت هذا unsigned يستخدم النوع "الوثيق" عدة مرات، لكنه لم ير قط شرحا لذلك. أفترض أن هناك موافق signed يكتب. إليك مثال:

static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((غير موقعة)(next/65536) % 32768);
}
void mysrand(بذرة غير موقعة) {
    next = seed;
}

ما جمعته حتى الآن:
- على نظامي، sizeof(unsigned) = 4 (تلميحات في الثانية 32 بت غير موقعة)
- قد يتم استخدامه كاختصار لتلقي نوع آخر إلى النسخة غير الموقعة:

signed long int i = -42;
printf("%u\n", (unsigned)i);

هل هذا ansi c، أو مجرد ملحق مترجم؟

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

المحلول

unsigned حقا اختصار ل unsigned int, ، وحدد ذلك في القياسية C.

نصائح أخرى

unsigned يعني unsigned int. signed يعني signed int. وبعد باستخدام فقط unsigned هي وسيلة كسول للإعلان unsigned int في جيم نعم هذا هو ANSI.

تاريخيا في ج، إذا قمت بحذف نموذج البيانات "int" مفترض. لذا "غير موقعة" هي اختصار "int int". لقد اعتبر هذا ممارسة سيئة لفترة طويلة، لكن لا يزال هناك قدرا عاديا من التعليمات البرمجية التي تستخدمها.

في ج، unsigned هو اختصار ل unsigned int.

لديك نفس الشيء long هذا هو اختصار ل long int

ومن الممكن أيضا إعلان unsigned long (ستكون unsigned long int).

هذا في معيار ANSI

في C و C ++

unsigned = unsigned int (Integer type)
signed   = signed int (Integer type)

يمكن أن يكون لعدد صحيح غير ميزي يحتوي على بتات N مقيمة بين 0 و (2 ^ n-1)، وهو 2 ^ n قيم مختلفة.

عدد صحيح غير مائع إما إيجابي أو صفر.

يتم تخزين الأعداد الصحيحة الموقعة في جهاز كمبيوتر باستخدام مكملتين.

جلب بلدي الإجابة من سؤال آخر.

من C المواصفات, ، القسم 6.7.2:

- غير موقعة، أو غير موقعة

وهذا يعني أن unsigned, ، عند عدم تحديد النوع، يجب أن الافتراضي unsigned int. وبعد حتى كتابة unsigned a بالضبط مثل unsigned int a.

وفقا ل C17 6.7.2 §2:

يجب أن تكون كل قائمة من محطات النوع من الفوزون المتعددينات التالية (محددة بواسطة الفواصل، عندما يكون هناك أكثر من multiset واحد لكل عنصر)؛ قد تحدث محطات النوع بأي ترتيب، ربما متداخل مع محطات الإعلان الأخرى

- فارغ
- شار
- شار وقعت
- غير موقعة
- قصير، وقعت قصيرة، قصيرة، قصيرة، أو الموقع
- قصيرة غير موقعة أو غير موقعة
- int أو الموقع أو الموقع
- غير موقعة، أو غير موقعة
- طويل، وقعت طويلا أو طويل، أو موقع طويل
- غير موقعة طويلة، أو غير موقعة
- طويل طويل، وقعت طويلا طويلا، طويل طويل، أو وقعت طويلة طويلة
- غير موقعة طويلة طويلة، أو غير موقعة طويلة الدولية
- يطفو
- مزدوج
- طويل مزدوج
- _Bool.
- تعويم _complex.
- مزدوج _complex.
- طويل مزدوج _complex
- محدد نوع الذرية
- محطات الهيكل أو الاتحاد
- المعهد المعين
- typedef اسم

لذلك في حالة unsigned int يمكننا إما الكتابة unsigned أو unsigned int, ، أو إذا شعرنا بالجنون، int unsigned. وبعد الأخير منذ المعيار غبي بما يكفي للسماح "... قد يحدث بأي ترتيب، ربما intermixed". هذا عيب معروف من اللغة.

يستخدم رمز C السليم unsigned int.

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