كدها و كدگذاري
كدگذاري، شيوه مناسبي براي نمايش و انتقال اطلاعات است. از كدهاي دودويي يا باينري براي انتقال و نمايش اطلاعات استفاده ميشود. بدين ترتيب امكان پردازش رايانه بر دادههاي عددي و غيرعددي فراهم ميآيد.
به نظر شما پاسخ عمل جمع زير چيست؟
1001000111+
1101100010
احتمالا خواهيد گفت 2102100121، اما كمي صبر كنيد. دادن
پاسخ به اين سئوال به اين بستگي دارد كه بدانيم اين اعداد در چه مبنائي قرار دارند! ما در حساب معمولي محاسبات را در مبناي ده انجام ميدهيم. اما رايانه اين كار را در مبناي دو انجام ميدهد.
مبنا چيست؟
مبناي ده، يعني اين كه ما براي نمايش اعداد، ده رقم داشته باشيم. فرق رقم و عدد چيست؟ يك عدد، از ارقام تشكيل شده است. ارقام در مبناي ده، عبارتند از 0، 1، ...، 8، 9 .
وقتي ميگوئيم ده رقم داريم، يعني وقتي يكي يكي به يك عدد اضافه ميكنيم، وقتي به 9 رسيد، عدد يكان صفر ميشود و عدد دهگان يكي اضافه ميشود. همين كار در سطوح بعدي هم اتفاق ميافتد. (يك شمارنده كيلومتر شمار را مجسم كنيد.)
اما اگر كيلومتر شماري داشته باشيم كه تنها دو رقم داشته باشد (0 و 1)، چه اتفاقي در شمارش ميافتد؟ تغييرات را به ترتيب مينويسيم (وقتي يكي يكي اضافه ميكنيم) :
0000000
0000001
0000010
0000011
0000100
اين يك شمارنده در مبناي دو است. عدد آخري هم صد نيست، بلكه يك، صفر، صفر است. حال بيائيد دو شمارنده مبناي دو و مبناي ده را با هم از صفر، يكي يكي در كنار هم افزايش دهيم:
0000000 0000
0000001 0001
0000010 0002
0000011 0003
0000100 0004
مشاهده ميكنيد كه عدد 100 در مبناي دو معادل 4 در مبناي ده است. كدگذاري بر مبناي ده (دهدهي)، يكي از انواع كدهاي متداول، است. اين مبنا به دليل اينكه ما انسانها از ابتدا حساب را بر آن ياد گرفتهايم، قابل فهم و درك براي ما است. دليل اصلي آن هم، احتمالا تعداد انگشتان دست يك انسان است. (احتمالا اگر در سيارهاي موجودي با 4 انگشت در هر دست و 3 دست زندگي كند، مبناي محاسبات 12 خواهد بود!!). در حاليكه انسان از حساب مبناي 10 (دهدهي) استفاده ميكند، رايانهها سيستم مبناي دو (دودويي) را بكار ميبرند.
چرا مبناي 2
ممكن است اين سؤال مطرح شود كه چرا در رايانه، از سيستم اعداد دودويي استفاده ميشود. پاسخ اين است، با توجه به سادهترين مدار الكترونيكي كه يك كليد شامل حالتهاي روشن و خاموش است، نگهداري اعداد در رايانه بر مبناي سطوح ولتاژ روشن و خاموش، شامل دو حالت 0 و1 است. بنابراين امكان نمايش دو رقم 0 و 1، ما را به انجام عمليات در مبناي دو سوق مي دهد. البته ميتوان رايانههايي ساخت که از مبنای ده استفاده نمايند، ولی اين كار مشكلات فني خاصي را تحميل ميكند كه بحث آن در گنجايش اين كتاب نيست (البته رايانه هاي با مبناي ده هم در مواردي ساخته شده اند).
در مبنای دو از دو رقم صفر و يک (ارقام باينری) استفاده میشود. رايانهها براي شناسايي اعداد و انجام محاسبات بر روي آنها، با تركيبي از مقادير صفر و يك، عمليات مختلفي را انجام ميدهند. در واقع در رايانه همه چيز از جمله اعداد، آدرس بخشهاي مختلف، نوع دستورالعملها و ... همگي با يك سري اعداد دودويي بيان ميشوند. اين همان معناي ساختار رقمي (ديجيتالي) رايانهها است.
سيستم اعداد دودويي
در سيستم مبناي 10، ده نماد جدا از هم يعني 0و1و2و ... و 9 براي توليد اعداد وجود دارند. در حاليكه در سيستم دودويي تنها دو نماد 0 و 1 موجود است. براي كار بر روي سيستم اعداد دودويي لازم است تا با تبديل دهدهي به دودويي، و برعكس آشنا شويم و سپس چگونگي انجام عمليات اصلي رياضي بر روي اعداد دودويي را بررسي كنيم.
تبديل از دهدهي به دودويي
يكي راههاي معمول براي اين تبديل، انجام تقسيمات متوالي بر 2 است. طي اين تقسيم، باقيماندهها مورد استفاده قرار ميگيرند و عدد دودويي را توليد ميكنند. تقسيمات تا صفر شدن خارج قسمت ادامه پيدا ميكند. سپس باقيماندهها به صورت معكوس بدنبال هم نوشته ميشوند تا عدد دودويي حاصل شود.
مثال 10-1
تبديل 25 در مبناي 10 به مبناي دودويي:
باقيمانده خارجقسمت
1 12 = 2/25
0 6 = 2/12
0 3 = 6/2
1 1 = 2/3
1 0 = 2/1
بنابراين عدد بدست آمده برابر است با: 11001 در مبنا دو.
براي تبديل عدد اعشاري از مبناي 10 به مبناي 2، از روش ضرب مكرر عدد اعشاري در شماره مبناي جديد يعني 2 استفاده ميگردد و در هر عمل ضرب، جزء صحيح عدد حاصل ضرب، نشانگر يك رقم از عدد اعشاري در مبناي جديد است كه به ترتيب حاصل شدن، از چپ به راست عدد اعشاري قرار ميگيرند.
مثال 10-2
عدد 875/0 از مبناي 10 به مبناي 2 به صورت زير حاصل ميشود:
750/1 = 2 * 875/0
500/1 = 2 * 750/0
000/1 = 2 * 500/0
در نتيجه 2(111/0) = . 10(875/0)
تبديل از دودويي به دهدهي
يك عدد دودويي به وسيله جمعكردن توانهايي از 2 كه مقدار ضريبشان يك است، به صورت دهدهي آن تبديل ميشود. به مثال زير توجه كنيد:
مثال
تبديل عدد 110012 به دهدهي:
1 2 4 8 16
1 0 0 1 1
2510 = 1 + 0 + 0 + 8 + 16
در اين روش، مكان هر رقم در عدد مبناي 2 داراي يك وزن مربوط به خود است. با جمع نمودن وزنهاي مربوط به يكها عدد دودويي حاصل ميشود. دانستن وزن مربوط به مكان بيت دودويي اين امكان را ميدهد كه به جاي استفاده از روند تقسيم متوالي، مستقيما يك عدد دهدهي را به دودويي تبديل نمايد. مثال 10-4 بيانگر اين قضيه است.
مثال
تبديل 39 از مبناي دهدهي به مبناي دودويي:
1 2 4 8 16 32
1 1 1 0 0 1
39 = 1 + 2 + 4 + 0 + 0 + 32
بنابراين: 1001112 = 3910
براي تبديل عدد اعشاري از مبناي 2 به مبناي 10، ارقام اعشاري را از چپ به راست به ترتيب 1- و 2- و ... شمارهگذاري ميكنيم. سپس هر رقم را در 2 بتوان آن شماره ضرب ميكنيم و حاصل ضربها را با هم جمع ميكنيم. به مثال زير توجه كنيد:
مثال
تبديل 1011/0 از مبناي 2 به مبناي 10:
10(6875/0) = 4-^2×1 + 3-^2×1 + 1-^2×1 = 2(1101/0)
تمرين
اعداد دودويي زير را به دهدهي تبديل كنيد.
10110010ر ؛ 1101101110 ؛ 10010001
اعداد دهدهي زير را به دودويي تبديل كنيد.
2003 ؛ 244244 ؛ 1286746
مبناهاي متداول
آيا فقط مبناي دو و ده وجود دارد؟ خير. هر مبنائي ميتواند وجود داشته باشد. مثلا شما ميتوانيد شمارندهاي درست كنيد كه 3 رقم داشته باشد (مبناي 3). يا شمارندهاي درست كنيد كه 25 رقم داشته باشد (مبناي 25). در مبناهائي كه بيش از ده رقم دارند، به جاي ارقام بعد از 9 ميتوان از حروف الفبا استفاده نمود. A به جاي رقم بعد از 9 و ….
سيستم مبناهاي هشت و شانزده (HEX)، به عنوان نمايش مناسبي براي بيان و كار با ارقام دودويي بكار ميروند. چرا كه نمايش اعداد دودويي به خاطر طولاني بودن آنها، دشوار است و مبناهاي هشت و يا شانزده به صورت راحتتري مورد استفاده و انجام محاسبات قرار ميگيرند. مثلا بيان عدد 100010010110 به صورت معادل آن در مبناي شانزده 896H آسانتر است. از اين رو تبديل از مبناي دو به مبناي هشت و شانزده و بالعكس، نقش مهمي در رايانهها دارد.
شانزدهشانزدهي
|
هشتهشتي
|
دودويي
|
دهدهي
|
0
|
0
|
0000
|
0
|
1
|
1
|
0001
|
1
|
2
|
2
|
0010
|
2
|
3
|
3
|
0011
|
3
|
4
|
4
|
0100
|
4
|
5
|
5
|
0101
|
5
|
6
|
6
|
0110
|
6
|
7
|
7
|
0111
|
7
|
8
|
10
|
1000
|
8
|
9
|
11
|
1001
|
9
|
A
|
12
|
1010
|
10
|
B
|
13
|
1011
|
11
|
C
|
14
|
1100
|
12
|
D
|
15
|
1101
|
13
|
E
|
16
|
1110
|
14
|
F
|
17
|
1111
|
15
|
در مبناي هشت، از ارقام 0 و 1 و .. 7 ، و در مبناي شانزده، از ارقام 0 و 1 و .. 9 و A و B و C و D و D و E و F استفاده ميشود. در جدول 1-10 نمايش دودويي، دهدهي، هشتهشتي و شانزدهشانزدهي براي اعداد 0 تا 15 نشان داده شده است.
براي نمايش يك عدد دودويي به معادل شانزدهشانزدهي، از سمت راست گروههاي چهاربيتي را جدا كرده و هر عدد چهاربيتي دودويي را با معادل شانزدهشانزدهياش طبق جدول جايگزين ميكنيم. براي تبديل از شانزدهشانزدهي به دودويي، هر رقم شانزدهشانزدهي را با چهار بيت دودويي معادلش جايگزين ميكنيم. به مثال 10-6 توجه كنيد.
مثال 10-6
تبديل عدد دودويي 101011110101 به شانزدهشانزدهي:
ابتدا اين عدد به گروههاي چهاربيتي در ميآيد: 0101 1111 1010
سپس هر گروه چهاربيتي با معادل شانزدهشانزدهياش جايگزين ميشود:
0101 1111 1010
5 F A
بنابراين: AF5H = B101011110101
در مورد اعداد اعشاري نيز به همين صورت عمل ميكنيم، با اين تفاوت كه از چپ به راست (يعني بعد از علامت مميز) تقسيمبندي چهاررقمي انجام ميشود.
هر رقم در مبناي هشت، برابر با سه رقم دودويي است. براي تبديل يك عدد از مبناي دو به مبناي هشت معادل آن، از سمت راست گروههاي سهبيتي را جدا كرده و هر عدد سهبيتي دودويي را با معدل هشتهشتياش كه در جدول قبل آمده است، جايگزين ميكنيم. در مورد اعداد اعشاري نيز به همين صورت عمل ميكنيم، با اين تفاوت كه از چپ به راست (يعني بعد از علامت مميز) تقسيمبندي سهررقمي انجام ميشود. همچنين براي تبديل از مبناي هشت به مبناي دو نيز هر رقم مبناي هشت را با سهبيتي معدلش جايگزين ميكنيم. به مثال زير توجه كنيد:
مثال 10-7
تبديل عدد دودويي 111101 به مبناي هشت معادل آن:
ابتدا اين عدد به گروههاي سهبيتي در ميآيد: 101 111
سپس هر گروه سهبيتي با معادل هشتهشتياش جايگزين ميشود:
101 111
5 7
بنابراين: O75 = B111101