الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة - شغل مخك ( 28 )

مغلق
بدأه هاني الأتاسي في 4 أكتوبر 2005 · 7 رد · 1,481 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

: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!

My Blog

#2

ربما

#define MAX_INT   (int)((unsigned)~0 >> 1)

أو

#define MAX_INT         INT_MAX

أو أي رقم تحدده أنت

#define   MAX_INT   16

لا كن حذاري مما قد يحصل من أخطاء من جراء القيمة التي تحددها

d4baa0.gif
#3

السؤال مش واضح كويس , على ما فهمت تكون الاجابه بهذا الشكل

#define MAX_INT  0xffffffff

وتعمل بهذا الشكل

#include <stdio.h>
#define MAX_INT  0xffffffff
void main(void) {
  printf("%u\n", MAX_INT);
}

يا ريت توضح السؤال والمطلوب اكثر

#4

ما رايك يا هاني بهذه القيمة

pow(2,8*sizeof(int))-1

تم تعديل هذه المشاركة بواسطة عماد الخليل في 4 أكتوبر 2005 في 19:45

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#5

أعتقد أن عماد الخليل جابها صح :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) ستحدد من جراء نظام التشغيل وستكون القيمة الصحيحة دائما حسب نظام التشغيل , أما القيم الثابتة فهي مشكلة في حد ذاتها ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

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!

My Blog

#7
#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

#8

اخي asm4all .. مافي فرق بين حلك الأخير والحل الذي وضعته ووضعه الأخ DeltaAziz .. سوى أنك نسيت أن ترجع وتحول الجواب النهائي إلى (int)

في معالجات 32 بت

-1 == 0xFFFFFFFF و

~0 == 0xFFFFFFFF

في معالجات 16 بت

-1 == 0xFFFF و

~0 == 0xFFFF

Coding on the Cloud and for the Cloud!

My Blog

هذا الموضوع مغلق.

مواضيع مشابهة