# البرمجة/تجريد

البرنامج في أبسط المستويات هو متتالية من 0 و 1 يترجمها النظام بفضل المعالج الذي يؤدي العمليات التالية: قراءة، كتابة البيانات (الذاكرة ، ملف ،...) ، حسابات ، ونقل البيانات ...
لكن بين المكونات الإلكترونية في قلب النظام وطريقة تفكير العقل البشري هناك ميراث من إسهامات متعاقبة طوال تاريخ المعلوماتية وجهت على العموم لتفسير أفكارنا المجردة إلى تعليمات محسوسة في مستوى النظام بطريقة أكثر وثوقا وبداهة.

## البت

لفظة البت (bit) هو إدغام للعبارة النظام الثنائي بالإنجليزية (binary digit). في الإلكترونيات الرقمية الإشارات والمكونات لا يمكن عموما أن تستقر إلا على حالتين، عادة 0 و 5 فلط (volts)، إليهما نسند تعسفا القيمة 0 لأحدهما و القيمة 1 للآخر. هكذا، مكونات المعلوماتية تجمع ملايين من الترانزيستورات (دوائر كهربائية) التي لا يمكن أن تعمل إلا حسب منطق له حالتين. للتبسيط إذا طبقنا توترا له القيمة الثنائية 1 على ترانزيستور، هذا سيسمح بمرور التيار، وإذا طبقنا توترا يقابل القيمة الثنائية 0، سيمنع تدفق التيار. دور الترانزيستورات هو، للتذكير، مراقبة التيار لكي نستخدمه بالضبط هناك حيث الحاجة إليه. التيار نفسه إذا كان يوصل معلومة فهو ثنائي الاستقرار (يستقر على حالتين).
نفس الشيء بالنسبة لتمثيل وتخزين المعطيات، كل صورة، كل معلومة عليها أولا أن تتحول إلى تتابع من 0 و 1 حتى تتمكن المعلومة من الانتشار في النظام الإلكتروني أولا، ثم تخزن أو ترجع.

## تمثيل الأعداد

تاريخيا استخدمت الحواسيب لمعالجة الأعداد العشرية، وبعبارة أخرى للقيام بعمليات حسابية. البت هو نفسه عدد، التحويل من عدد عشري (رقم الأساس 10) إلى عدد ثنائي (رقم الأساس 2) يمكن القيام به بإجراءات نسبيا بسيطة.

### فكرة أساس حسابي

في نظام عد "ذو أساس" ، كل رقم من عدد يكون مضروبا في قيمة أساسه، قيمة هي نفسها توضع على أس يقابل موقعها في العدد بالنسبة للفاصل "العشري" (النقطة حسب المعيار البريطاني ، الفاصلة حسب المعيار الفرنسي).
هكذا العدد في الأساس 10
$982.657$
تعني
$9\times 10^{2}+8\times 10^{1}+2\times 10^{0}+6\times 10^{-1}+5\times 10^{-2}+7\times 10^{-3}$
أي
$9\times 100+8\times 10+2\times 1+6\times 0.1+5\times 0.01+7\times 0.001$
أو أيضا
$900+80+2+0.6+0.05+0.007$

### الثنائي المحض

لمعرفة ما هو $982.657$ في أساس العد 2 (أي معرفة كيف تبدو مثل هذه الكمية في سلسلة من الأرقام بين 0 و 1) يغير أساس العد أولا. هكذا في الثنائي $982.657$ تريد (على غير العادة) القول
$9\times 2^{2}+8\times 2^{1}+2\times 2^{0}+6\times 2^{-1}+5\times 2^{-2}+7\times 2^{-3}$
إلا أن 9 ، 8 ، 2... ليست بالضبط أرقاما ثنائية. في الإسقاط العشري يُنتقل بوحدة في الصف التالي حين الوصول إلى 9، في الثنائي يُفعل ذلك عند الوصول إلى 1، هذا يعني أن 0 في الأساس 10 يقابل فعلا 0 في الأساس 2، لكن 2 في الأساس 10 يقابل 10 في الأساس 2، وهلم جرا 3 تقابل 11، 4 تقابل 100، 5 تقابل 101 ... وكمؤشر على ذلك هذا جدول التقابل الثنائي ل 9 أرقام العشرية:
تقابل بين الأرقام العشرية وقيمتها في الثنائي :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 |
لكن 7 على الصف الثاني لعدد عشري تختلف اختلافا أساسيا عن أي تعادل ثنائي ل 7 على نفس الصف. 7 من الأساس 10 هي نتيجة 70 تجميع من 10 ، يلاحظ إذن أنه إذا التجميع لم يكن على الأساس 10 ، فإنه ببساطة لا 7 هنا : ترجمة رقم "على أساس" على هذا النحو ببساطة لا يُحدث معنى رياضي (على الرغم من أن هذا قد يحدث معلومياتيا على نحو يوضح في مكان آخر). يجب على العكس معرفة كم تجميعة من 2 يمكن القيام بها ل 982، باتباع إسقاط ثنائي. الطريقة الأسرع هي القيام بعمليات قسمة متتالية على 2 مع الإبقاء على باقي القسمة حاضرا.
هكذا
${\frac {982}{2}}=491\$ الباقي 0
${\frac {491}{2}}=245\$ الباقي 1
${\frac {245}{2}}=122\$ الباقي 1
${\frac {122}{2}}=61\$ الباقي 0
${\frac {61}{2}}=30\$ الباقي 1
${\frac {30}{2}}=15\$ الباقي 0
${\frac {15}{2}}=7\$ الباقي 1
${\frac {7}{2}}=3\$ الباقي 1
${\frac {3}{2}}=1\$ الباقي 1
${\frac {1}{2}}=0\$ الباقي 1
وأخيرا $1111010110$ بالنسبة للعدد الصحيح الطبيعي على شمال الفاصلة العشرية. لكن كيف يمثل الكسر على يمين الفاصلة العشرية؟

### الفاصلة المثالية والثابتة والمتحركة

في أفضل الحالات الكسر هو تقسيم للوحدة، كلما تقدمنا في المنازل كلما كان التقسيم أكثر دقة. بالمعنى الدقيق للكلمة الجزء التالي الذي هو الكسر يمثل بنفس المنطق كالجزء الصحيح الطبيعي، أي أنه مع كل انتقال بمنزلة في العدد يخفض الأس.
هكذا في الأساس 10
$0.1$ تعني ${\frac {1}{10^{1}}}$ إذن $1\div 10$
$0.01$ تعني ${\frac {1}{10^{2}}}$ إذن $1\div 100$، ...
وفي الأساس 2
$0.1$ تعني ${\frac {1}{2^{1}}}$ إذن $1\div 2$
$0.01$ تعني ${\frac {1}{2^{2}}}$ إذن $1\div 4$, ...
هكذا لتغيير جزء الكسر، نقسم الكسر إلى تقابل بين التقسيمات العشرية والثنائية
تقابل بين أعداد عشرية وقيمتها الثنائية :
| ثنائي | 0.1 | 0.01 | 0.001 | 0.0001 | 0.00001 | 0.000001 | ... |
| مقابل عشري | 0.5 | 0.25 | 0.125 | 0.0625 | 0.03125 | 0.015625 | ... |
إذن بالنسبة ل $982.657$ لإيجاد المقابل الثنائي ل $0.657$ يجب القيام بعملية ناقص لكل المقابلات الممكنة مع الحذر من عدم تجاوز القيمة المطلوبة. هكذا $0.657=0.5+0.125+0.03125+...=1\times 2^{-1}+0\times 2^{-2}+1\times 2^{-3}+0\times 2^{-4}+1\times 2^{-5}+...$.
طريقة أخرى وهي تكرار ضرب جزء الكسر في 2 مع نقل الجزء الصحيح الناتج في العدد الثنائي
هكذا
* 0.657 × 2 = 1.314 -> 1
* 0.314 × 2 = 0.628 -> 0
* 0.628 × 2 = 1.256 -> 1
* 0.256 × 2 = 0.512 -> 0
* 0.512 × 2 = 1.024 -> 1
* 0.024 × 2 = 0.048 -> 0
$982.657$ هي إذن بالثنائي تقريبا ...$1111010110.101010$
الأمر يتعلق بعدد ذو كسر مستمر بالنظر إلى ما تمثله $982.657$ في الأساس 10 فإنها لا يمكن أن تمثل إلا بقيمة تقريبية دورية في الأساس 2.