:rolleyes:
هذا السؤال مختص بمبرمجي السي ..
ماهي أفضل طريقة لكتابة الثابت MAX_INT ؟
#define MAX_INT ??????
MAX_INT يجب أن تعطينا أكبر رقم يمكن أن يستوعبه النوع int في السي..
---------
بقية السلسلة تجدها هنا: /index.php?showtopic=48850
:rolleyes:
هذا السؤال مختص بمبرمجي السي ..
ماهي أفضل طريقة لكتابة الثابت MAX_INT ؟
#define MAX_INT ??????
MAX_INT يجب أن تعطينا أكبر رقم يمكن أن يستوعبه النوع int في السي..
---------
بقية السلسلة تجدها هنا: /index.php?showtopic=48850
تم تعديل هذه المشاركة بواسطة هاني الأتاسي في 4 أكتوبر 2005 في 08:57
Coding on the Cloud and for the Cloud!
ربما
#define MAX_INT (int)((unsigned)~0 >> 1)
أو
#define MAX_INT INT_MAX
أو أي رقم تحدده أنت
#define MAX_INT 16
لا كن حذاري مما قد يحصل من أخطاء من جراء القيمة التي تحددها
السؤال مش واضح كويس , على ما فهمت تكون الاجابه بهذا الشكل
#define MAX_INT 0xffffffff
وتعمل بهذا الشكل
#include <stdio.h>
#define MAX_INT 0xffffffff
void main(void) {
printf("%u\n", MAX_INT);
}يا ريت توضح السؤال والمطلوب اكثر
ما رايك يا هاني بهذه القيمة
pow(2,8*sizeof(int))-1
تم تعديل هذه المشاركة بواسطة عماد الخليل في 4 أكتوبر 2005 في 19:45

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر
فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري
لقراءة القرآن الكريم و سماعه و تفسيره ........

أعتقد أن عماد الخليل جابها صح :D ,,,
المشكلة ومافيها أن int حجمه متغير حسب نظام التشغيل ,,
ففي أنظمة 16 بت كالدوز ووندوز 3x , كان حجم ال int يساوي 16 بت "تعود هذه السياسة لمصرفات سي++ لاأعلم كلها أم بعضها " لكن مثلا في باسكال لايوجد شيء كهذا ,,
في أنظمة 32 بت , حجم int سيساوي 32 بت ,
في أنظمة 64 بت حجم int سيساوي 64 بت ,,
لكن إن أردت أن تحدد حجم بيانات أو معطيات بحجم معين :
16 bit تكون short,INT16
32 bit تكون INT32 أو long
64 Bit تكون INT64 أو long int مع أني لم أجربها ..
وإقتراح عماد متغير حيث أن sizeof(int) ستحدد من جراء نظام التشغيل وستكون القيمة الصحيحة دائما حسب نظام التشغيل , أما القيم الثابتة فهي مشكلة في حد ذاتها ,,
B)
شو هالتشغيل المخ هذا :rolleyes: ماحدا حل السؤال صح :blink: ..
تحليلHGB وعماد خليل صحيحن . لكن حل عماد بدو معالجين ليجيب القيمة بسرعة ;) فالحل جدا بطيئ ويستخدم double or float . فint تعتمد على المعالج فقد تكون 16 بت في معالجات 16 بت و32 بت في معالجات 32 بت ..
Asm4All حلك يعمل فقط على معالجات 32 بت وهو يعطي قيمة Max Unsigned Int
الحل الأظبط للأخ DeltaAziz ولكن فيه مشكلة أن بعض المترجمات قد تعتبر الصفر ليست قيمة int وعند القلب ثم التحويل إلى unsigned يمكن أن يتحتوي الجزء العلوي على أصفار. حلك يعمل في فجوال ستديو ولكن قد لا يعمل في باقي المترجمات.
#define MAX_INT (int)((unsigned)~0 >> 1)
بالنسبة لي أنا أحلها كالتالي:
#define MAX_INT (int)((unsigned)(int)-1 >> 1)
أكبر عدد في int هو عبارة عن العدد الذي يكون جميع خاناته واحد باستثناء الخانة العليا فتكون 0 ..
القيمة -1 تبقى -1 إذا تم تحويلها من short إلى int وهكذا . وهي عبارة عن بت ذو القيمة 1 في كل خانات الرقم . بعدها نحولها إلى unsigned ومن ثم نزيحها إلى اليمين بمقدار واحد بت.
:)
تم تعديل هذه المشاركة بواسطة هاني الأتاسي في 4 أكتوبر 2005 في 22:57
Coding on the Cloud and for the Cloud!
#include <stdio.h>
#define MAX_INT ((unsigned int)0xffffffff) >> 1
void main(void) {
printf("%i\n", MAX_INT);
}جرب الكود يا اخ هاني على اي مترجم سواء كان 16 أو 32 بيت
انا جربته على BORLANDC 16 bit طبع 32767
وجربته على vc 2003 32 bit طبع 2147483647
حد تاني يجربه عنده
فكرتها :
معي 32 بيت وحايد يأخذ منها بطول unsigned int
في 16 بيت بيكون 16 وفي 32 بيت بيكون 32
بعدها يتم عمل ازاحه لليمين و وضع 0 في اقصى اليسار
في حالة 16 بيت يبقى معانا 15 واحد
في حالة 32 بيت يبقى معانا 31 واحد
وآخر بيت صفر
تم تعديل هذه المشاركة بواسطة Asm4all في 5 أكتوبر 2005 في 09:17
هذا الموضوع مغلق.