بتـــــاريخ : 2/26/2011 8:46:08 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1355 0


    مسائل منخفضة المستوى لا بد من الالمام بها! basic low level stuff for gfx coders

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : hasan_aljudy | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :

    أولا: الارقام بالـ binary و الـ hexadecimal و العلاقة بينهما

    كما تعلمون (و بدون فلسفة زايدة) الكومبيوتر يتعامل مع الارقام على شكل اصفار و آحاد, 01000111 و يتبع في هذا نظاما للأرقام يختلف عن النظام اللذي نتبعه نحن البشر, فالرقم
    10
    بالنسبة لنا هو الرقم عشرة, لماذا؟ لانه مكون من خانتين, اول خانة هي خانة الاحاد, و قيمتها صفر, و ثاني خانة و هي خانة العشرات, و قيمتها واحد, اذا هناك صفر آحاد + واحد عشرات = صفر + عشرة = عشرة

    بالنسبة للحاسوب, فالرقم
    10
    هو اثنان, لان النظام الثنائي يعتبر الخانة الأولى هي خانة الواحد, و الخانة الثانية هي خانة الاثنان, يمكن اعتبار ان 0 هو off او مغلق, و 1 هو on او مفتوح.
    هنا خانة الواحد off, و خانة الاثنين هي on, يعني صفر + اثنان = اثنان.

    ليس هذا المجال للاسهاب في شرح نظم الاعداد, لا بد من وجود العديد من المواضيع في هذا المنتدى او في اماكن مختلفة من الانترنت تتحدث عن هذا الموضوع.

    ابسط طريقة لتحديد ما هي قيم رقم ثنائي, مثل
    100101001

    هي التفكير في ارقام الخانات على انها تحمل قيمة معينة, و لتحديد قيمة الرقم, نقوم باخذ جميع الخانات اللتي تحمل رقم 1, و نقوم باضافة قيم هذه الخانات الى بعضها.

    في الارقام العشرية, فان الخانات مرتبة هكذا:

    آحاد - عشرات - مئات - آلاف ... الخ

    او, بنفس الطريقة, لو كتبناها على شكل ارقام:

    واحد - عشرة - مئة - الف - عشرة الاف - مئة الف ... الخ

    او

    1 - 10 - 100 - 1000 - 10000 ... الخ

    حيث كل خانة هي الخانة السابقة مضروية في عشرة, و ذلك لان النظام عشري!

    في النظام الثنائي, فإن كل خانة هي الخانة السابقة مضروبة في 2:

    1 - 2 - 4 - 8 - 16 - 32

    مثلا, هذا الرقم:

    100101001

    يمكن تحليله هكذا:

        1       0         0        1         0         1         0          0           1
    -----------------------------------------------------------------------
       256 125      64       32       16         8         4          2           1



    لاخذ قيمة الرقم, ننظر الى الخانات اللتي تحمل رقم 1, و نجمع قيمها:
    1 + 8 + 32 + 256 = 41 + 256 = 297


    طيب,

    كتابة الارقام و تذكرها على شكل ثنائي امر صعب و معقد بعض الشيء, لذلك معظم الناس يفضلون استخدام الظام الست عشري hexadecimal لكتابة الارقام الثنائية ..

    النظام الست عشري, يبدا من 0 ..9 ثم يستخدم الحروف f .. a من اجل تمثيل الارقام من 10 الى 15

    اما الخانات فهي تتضاعف بمقدار 16 في كل خانة

    الجميل في هذا النظام, هي امكانية تحويل الارقام من النظام binary الى النظام hexadecimal مباشرة دون حسابات معقدة, و ذلك عن طريق اخذ كل 4 خانات (بتات) و تحويلها على حدة,

    مثلا,
    1100
    هو الرقم 12, و بالـ hex هو C
    اذا, 1100 تتحول الى C
    و الرقم
    0110
    هو الرقم 6, و بالـ hex هو ايضا 6
    اذا, يمكن تحويل الرقم

    11000110
    الى
    C6
    و ذلك لانه يمكن تحويل كل 4 خانات على حدة,

           11000110
            /         \
          /             \
        /                 \
    1100              0110
       |                   |
       |                   |
       |                   |
       |                   |
      C                   6
         \               /
           \           /
             \       /
               \ /
                C6


    كل ما عليك معرفته, هو كيفية تحويل رقم ثنائي ذو اربع خانات الى رقم عشري (او ست عشري)
    و هذا بسيط, فخانات الرقم الثنائي هي: 1 2 4 8
    يعني, 1100 هي 12 لأن ثالث و رابع بت هما 8 و 4 و هما الوحيدان اللذان يحملان الرقم 1, لذلك نجمعهما للحصول على الرقم.

    مثلا, الرقم الست عشري
    F03C
    هو:
    1111000000111100

    حيث:


       F          0        3           C
       |          |         |           |
       |          |         |           |
       |          |         |           |
    1111     0000    0011      1100


    ما دفعني لكتابة هذا الموضوع هو سؤال الاخ الشمري عن الـ bit patterns في موضوع
    سابق, و حينها اجبت اجابة مقتضبة نوعا ما, و كنت اقرأها قبل قليل و شعرت بأن اجابتي غير شافية, ففكرت في كتابة موضوع خاص عن الموضوع.

    هناك مواضيع أخرى من هذا القبيل اود التحدث عنها إن شاء الله:
    - عمليات الـ bit masking, و هي متعلقة بهذا الموضوع.
    - حساب احداثيات الـ pixels على الشاشة, او التحويل بين index احادي الابعاد و index ثنائي الابعاد .. حيث ان الشاشة بالنسبة لنا مربعة, و كل بكسل له احداثيين, سيني و صادي, و لكن بالنسبة للحاسوب, الشاشة عبارة عن linear frame buffer, او سلسلة خطية من النقاط.


    انا متأكد انه من يقرأ هذا الموضوع ستظل عنده اسئلة عالقة بدماغه, فيا ريت اللي عنده سؤال يسأل! (مللت من تكرار هذه الجملة دون فائدة).
    يا جماعة لو حد معبر الموضوع ده من أصله خلي يسأل!!!

    كلمات مفتاحية  :

    تعليقات الزوار ()