سؤال

ال printf تأخذ الدالة نوع وسيطة، مثل %d أو %i ل signed int.ومع ذلك، لا أرى أي شيء ل long قيمة.

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

المحلول

ضع l (حرف صغير L) مباشرة قبل المحدد.

unsigned long n;
long m;

printf("%lu %ld", n, m);

نصائح أخرى

أعتقد أنك تقصد:

unsigned long n;
printf("%lu", n);   // unsigned long

أو

long n;
printf("%ld", n);   // signed long

على معظم المنصات، long و int بنفس الحجم (32 بت).ومع ذلك، فإنه يحتوي على محدد التنسيق الخاص به:

long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned

بالنسبة لـ 64 بت، قد ترغب في الحصول على long long:

long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned

وبالطبع الأمر مختلف في نظام Windows:

printf("%l64d", n); // signed
printf("%l64u", un); // unsigned

في كثير من الأحيان، عندما أقوم بطباعة قيم 64 بت، أجد أنه من المفيد طباعتها بالنظام السداسي (عادةً بأرقام كبيرة، تكون مؤشرات أو حقول بت).

unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"

سوف طباعة:

0x00000000DEADBEEF

راجع للشغل، كلمة "طويلة" لم تعد تعني الكثير بعد الآن (على نظام التشغيل x64 السائد)."int" هو الحجم الافتراضي للنظام الأساسي، وعادةً ما يكون 32 بت.عادة ما يكون "الطويل" بنفس الحجم.ومع ذلك، لديهم دلالات مختلفة لقابلية النقل على الأنظمة الأساسية القديمة (والأنظمة الأساسية الحديثة المدمجة!)."طويل طويل" هو رقم 64 بت وعادة ما يقصد الناس استخدامه إلا إذا كانوا يعرفون حقًا ما كانوا يفعلونه في تحرير جزء من التعليمات البرمجية المحمولة لـ x-platform.وحتى في هذه الحالة، ربما كانوا سيستخدمون ماكرو بدلاً من ذلك لالتقاط المعنى الدلالي للنوع (على سبيل المثال، uint64_t).

char c;       // 8 bits
short s;      // 16 bits
int i;        // 32 bits (on modern platforms)
long l;       // 32 bits
long long ll; // 64 bits 

في الماضي، كان "int" يبلغ 16 بت.كنت تعتقد أنه سيكون الآن 64 بت، لكن لا، كان من الممكن أن يسبب ذلك مشكلات جنونية في قابلية النقل.وبطبيعة الحال، حتى هذا يعد تبسيطًا للحقيقة الغامضة والغنية بالتاريخ.يرى ويكي:عدد صحيح

يعتمد ذلك على ما إذا كنت تشير إلى حرف التنسيق الطويل غير الموقع "%lu".إذا كنت تشير إلى علامة طويلة، فإن حرف التنسيق هو "%ld".

في حال كنت تتطلع إلى الطباعة unsigned long long كما كنت، استخدم:

unsigned long long n;
printf("%llu", n);

بالنسبة لجميع المجموعات الأخرى، أعتقد أنك تستخدم الجدول من دليل الطباعة, ، مع أخذ الصف، ثم تسمية العمود لأي نوع تحاول طباعته (كما أفعل مع printf("%llu", n) فوق).

أعتقد أن الإجابة على هذا السؤال بشكل نهائي تتطلب معرفة اسم المترجم وإصداره الذي تستخدمه والنظام الأساسي (نوع وحدة المعالجة المركزية ونظام التشغيل وما إلى ذلك) الذي يتم التجميع من أجله.

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