المتغيرات
فضاءات التسمية
أفعال

div, ldiv, lldiv, imaxdiv

من cppreference.com
< c‏ | numeric‏ | math
 
 
 
دوال رياضية شائعة
الدوال
عمليات بسيطة
divldivlldivimaxdiv
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
دوال أسية ولوغارتمية ثابتة الأساس
(C99)
(C99)
(C99)
(C99)
دوال أسية وجذور
(C99)
(C99)
دوال حساب المثلثات والدول الزائدية
دالة الخطأ ودالة غاوس
(C99)
(C99)
(C99)
(C99)
إيجاد أقرب عدد صحيح لفاصلة عائمة (float)
(C99)(C99)(C99)
(C99)
(C99)
(C99)(C99)(C99)
دوال التعديل على الفاصلة العائمة (float)
(C99)(C99)
(C99)
(C99)
التصنيف والمقارنة
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
ثوابت ماكرو
 
معرفة في ملف <stdlib.h>
div_t     div( int x, int y );
(1)
ldiv_t    ldiv( long x, long y );
(2)
lldiv_t   lldiv( long long x, long long y );
(3) (منذ C99)
معرفة في ملف <inttypes.h>
imaxdiv_t imaxdiv( intmax_t x, intmax_t y );
(4) (منذ C99)

تحسب خارج (quotient) وباقي (remainder) قسمة البسط ‎x‎ على المقام ‎y‎.

تحسب خارج وباقي القسمة بالتوازي. خارج القسمة هو الخارج الجبري بعد ازالة أي فواصل عشرية (أي أن التقريب تجاه الصفر). باقي القسمة يحقق المعادلة quot * y + rem == x.

(حتى C99)

تحسب خارج القسمة (أي نتيجة العملية x/y) وباقي القسمة (نتيجة العملية x%y) بالتوازي.

(منذ C99)

[تعديل] المعطيات

x, y - أعداد صحيحة

[تعديل] القيمة المُرجعة

طالما يمكن تمثيل باقي وناتج القسمة ككائنين من النوع المناسب (int و long و long long و imaxdiv_t على التوالي) يتم ارجاع كائن من النوع ‎div_t‎ و‎ldiv_t‎ و‎lldiv_t‎ و‎imaxdiv_t‎ معرفات كالآتي:

div_t

struct div_t { int quot; int rem; };

أو

struct div_t { int rem; int quot; };

ldiv_t

struct ldiv_t { long quot; long rem; };

أو

struct ldiv_t { long rem; long quot; };

lldiv_t

struct lldiv_t { long long quot; long long rem; };

أو

struct lldiv_t { long long rem; long long quot; };

imaxdiv_t

struct imaxdiv_t { intmax_t quot; intmax_t rem; };

أو

struct imaxdiv_t { intmax_t rem; intmax_t quot; };


في حالة أن باقي أو ناتج القسمة لا يمكن تمثيله يكون السلوك غير معرف.

[تعديل] ملحوظات

حتى معيار C99 كان اتجاه تقريب الناتج واشارة الباقي سلوك تقرره البيئة المستخدمة (implementation-defined behavior) في حالة أن أحد معاملات القسمة عدد سالب. أما في ‎div‎ و‎ldiv‎ فسلوك التعامل مع الأعداد السالبة واحد بغض النظر عن البيئة.

الكثير من المعالجات تقوم بحساب كلا من الناتج والباقي عند تنفيذ عملية القسمة وذلك في نفس الخطوة (أمر واحد فقط في لغة الآلة). باستخدام هذه الدالة يمكن الاستفادة من هذه الخاصية لكن الكومبيلرات الحديثة عادة ماتكون قادرة على دمج عمليات ال / وال % المتجاورة من تلقاء نفسها.


[تعديل] مثال

قم بتشغيل هذا الكود:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
// فقط للتوضيح. احذر: لا يتم التأكد من عدم حدوث
// overflow
void itoa(int n, int base, char* buf)
{
 div_t dv = {.quot = n};
 char* p = buf;
 do {
 dv = div(dv.quot, base);
 *p++ = "0123456789abcdef"[abs(dv.rem)];
 } while(dv.quot);
 if(n<0) *p++ = '-';
 *p-- = '0円';
 while(buf < p) { char c = *p; *p-- = *buf; *buf++ = c; } // عكس
}
 
int main(void)
{
 char buf[100];
 itoa(12346, 10, buf);
 printf("%s\n", buf);
 itoa(-12346, 10, buf);
 printf("%s\n", buf);
 itoa(65535, 16, buf);
 printf("%s\n", buf);
}

الخرج:

12346
-12346
ffff

[تعديل] انظر أيضا

(C99)(C99)
تحسب باقي عملية قسمة لأعداد فاصلة عائمة (float) ‏
(دالة) [edit]
تحسب باقي قسمة ذو إشارة لعددين ذوي فاصلة عائمة
(دالة) [edit]
(C99)(C99)(C99)
تحسب باقي قسمة ذو إشارة بالإضافة إلى آخر 3 بت من ناتج القسمة
(دالة) [edit]
تم الاسترجاع من "https://ar.cppreference.com/mwiki/index.php?title=c/numeric/math/div&oldid=1507"

AltStyle によって変換されたページ (->オリジナル) /