اذهب إلى المحتوى

السؤال

نشر

هل هناك سبب منطقى لبدأ العد من الصفر ؟

سؤال جاء فى عقلى وانا استخدم index string[0]

Recommended Posts

  • 0
نشر

نعم هناك أسباب منطقية منها أن الـ Index هو إزاحة وليس ترتيب بمعنى عندما تكتب string[0]، فإن الرقم 0 هنا لا يعني "العنصر الأول"، بل يعني "كم خطوة أبتعد عن البداية؟".

وأيضاً أسباب تاريخية حيث كان هذا الترتيب يساهم في سرعة الحساب في الذاكرة في لغة مثل ال c ولذلك للتفصيل أكثر يرجى الإطلاع على التعليقات التالية

  • 0
نشر

وعليكم السلام ورحمة الله،

السبب الأساسي هو أن الفهرس يمثل المسافة من بداية المصفوفة في الذاكرة تخيل أنه عندك صف من الصناديق بحيث أن أول صندوق موجود عند نقطة البداية بالضبط، يعني المسافة من البداية = صفر أما الصندوق الثاني بعيد عن البداية بمسافة صندوق واحد يعني المسافة = 1، وهكذا.

لما الكمبيوتر يبحث عن عنصر في الذاكرة ييحسب موقعه كالتالي: عنوان البداية + الفهرس.

لكن لو بدأنا من 1 بدل 0، الكمبيوتر سيضطر أن يطرح 1 في كل مرة لكي يصل للموقع الصحيح، وهذا سيبطئ البرنامج كما أنه عندما تعمل loop  مثل for(i=0; i<10; i++) فأنت ستكرر بالضبط 10 مرات من 0 ل 9 وهذا منطقي رياضيا.

فاللصفر سيترك الحسابات أبسط وأسرع وهذا السبب الذي جعل معظم لغات البرمجة تستخدمه.

  • 0
نشر

في أغلب الأحيان ستجد السبب هو الذاكرة العشوائية، وهو أمر لا يتضح لك عند دراسة لغات مرتفعة المستوى مثل جافاسكربيت وبايثون والتي تقوم بتجريد الكثير من الأمور أي إخفائها عنك.

السبب هو  الـ Memory Offset أو إزاحة الذاكرة، حيث الذاكرة RAM شكلها كالتالي تقريبًا:

العنوان:  1000  1001  1002  1003  1004
القيمة:   'H'   'e'   'l'   'l'   'o'

وذلك عند تخزين المتغير:

let str = "Hello";

فالكمبيوتر يحفظ أول حرف في عنوان أساسي base address مثلاً 1000 وللوصول لباقي الأحرف نستخدم الإزاحة:

عنوان الحرف = العنوان الأساسي + الإزاحة (offset)

أي ما يحدث في الخلفية عند كتابة str[0] :

str[0]  1000 + 0 = 1000  
str[1]  1000 + 1 = 1001  
str[2]  1000 + 2 = 1002  

لو بدأنا من 1 كنا نحتاج إلى تنفيذ طرح في كل مرة:

str[1] 1000 + (1-1) = 1000

وتلك عملية زائدة لا حاجة إليها.

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...