در این فصل ، با توجه به اهمیت روش های کد گذاری اعداد و ارتباط آن با رایانه ، سیستم های عدد نویسی دودویی (Binary) ، اکتال (هشت تایی) و هگزا دسیمال (شانزده تایی ) را بررسی می کنیم
در روش عدد نویسی ای که در محاسبات و امور روزمره به کار می بریم ، با ده علامت 0 ، 1 ، 2 ، ... ، 9 و ارزش گذاری متفاوت ارقام در محل های مختلف ( یکان ، دهگان ، صدگان و ... ) می توانیم همه ی اعداد را بخوانیم و بنویسیم . در این سیستم ، ارزش هر رقم بستگی به محلی دارد که رقم در آن قرار گرفته است و هر مکان ، ارزشی معادل ده برابر ارزش مکانی رقم سمت راست دارد ؛ مثلا در عدد 49376 ، ارزش های ارقام به صورت زیر است :

سیستم دودویی :
اگر بخواهیم برای نمایش داده ها و اطلاعات از سیستم دهدهی استفاده کنیم ، در پیاده سازی سخت افزار رایانه ها حداقل به ده سیگنال الکتریکی با سطوح مختلف برای تشخیص ده رقم مختلف سیستم دهدهی از یکدیگر نیاز داریم . این وضعیت ، پیچیدگی های فراوانی را در عمل پدید می آورد که هم هزینه ی طراحی سخت افزار را افزایش می دهد و هم احتمال خطا را زیاد می کند . به همین دلیل ، باید دنبال روشی برای عدد نویسی بگردیم که پیاده سازی آن ، به کمترین تعداد سیگنال ها نیاز داشته باشد و چون ساده ترین وضع سیگنال ها ، وجود و یا وجود نداشتن آن هاست ،باید روشی را پیدا کنیم که فقط دو نماد برای نوشتن اعداد در آن به کار بروند .
اگر بخواهیم مفاهیم مربوط به روش معمولی عدد نویسی را برای این دستگاه بازسازی کنیم ، باید از دو علامت برای نوشتن رقم ها استفاده کنیم و ارزش مکانی هر رقم را دو برابر ارزش مکانی رقم سمت راستش به حساب بیاوریم .
با این حساب ، مثلا عددی که در این روش به صورت 10010 نوشته می شود ، در روش معمولی عدد نویسی به صورت زیر محاسبه می شود :

بنابراین 10(18) = 2(10010 ) .
برای تعمیم این روش ، عددی که تعداد نمادها ( و بعد ارزش مکانی ) را مشخص می کند ، مبنا یا پایه می نامیم و هنگام نوشتن عدد در این پایه ، عدد را در پرانتز می گذاریم و مبنا را به صورت زیر نویس در کنار آن قرار می دهیم ؛ پس مثلا 2(10010 ) خوانده می شود : یک ،صفر ، صفر ،یک ،صفر در مبنای دو . به این روش عدد نویسی در مبنای دو ، سیستم دودویی و یا سیستم باینری گفته می شود .
در حالت کلی ، داده هایی که وارد رایانه می شوند ، ابتدا به کد دودویی تبدیل می شوند و عملیات محاسبه و پردازش در مبنای دو صورت می گیرد و در نهایت ، در هنگام نمایش در خروجی ، نتیجه ها به کد دهدهی تبدیل می شوند .
برای اینکه عددی که در مبنای 10 نوشته شده را در مبنای 2 بنویسیم از روش تقسیم های متوالی بر عدد 2 استفاده می کنیم و عمل تقسیم را تا زمانی ادامه می دهیم که خارج قسمت از مبنا بزرگتر باشد و بعد ، آخرین خارج قسمت را می نویسیم و باقی مانده ها را از انتها به ابتدا می نویسیم :

روشی که برای نوشتن اعداد در مبنای 2 به کار بردیم ، برای هر عدد دیگری ( غیر از دو ) هم قابل استفاده است ؛ مثلا 8 (22) = 10(18) .
عملیات پردازش در سیستم دودویی ، مثل قوانین کلی محاسبه ی معمولی است ؛ با این تفاوت که رقم نقلی و قرضی در محاسبات ، به جای عدد 10 ، عدد 2 است . بنابراین ، جمع دو عدد 2(1011) و2(1001) در مبنای 2 به صورت زیر انجام می شود :

توجه کنید که مجموع دو رقم 1 و 1 در مبنای دو به صورت 10 نوشته می شود که 0 را به عنوان حاصل جمع می نویسیم و 1 را به عنوان رقم نقلی به واحد بعد منتقل می کنیم.

تفریق عدد 2(101) از عدد 2(10011) هم به صورت زیر انجام می شود :

همان طور که در مثال فوق مشاهده می کنید ، اگر در طبقه ای ، رقم بالایی از رقم پایینی کمتر باشد ،یک واحد از طبقه ی سمت چپ – که معادل دو واحد در طبقه ی فعلی است – به این طبقه منتقل می شود .

همانطور که مشاهده می کنید در حالت 1 – 0 به یک رقم قرضی نیاز است ، بنابراین حاصل تفریق 1 شده اما یک رقم قرضی نیز وجود دارد .
سیستم هشت تایی
در سیستم هشت تایی ، برای نمایش اعداد از ارقام 0 تا 7 استفاده می شود و مثل دستگاه دودویی ، برای تبدیل مبنا از 8 به 10 از عمل ضرب و برای تبدیل از مبنای 10 به 8 از عمل تقسیم استفاده می کنیم .

در مثال فوق مجموع دو عدد 5 و 6 برابر 11 است که از بزرگ ترین نماد در مبنای 8 –یعنی عدد 7- بزرگ تر شده است ؛ پس 8 واحد از آن کم می کنیم و یک واحد به طبقه ی بالاتر اضافه می کنیم و عدد 3 یعنی حاصل تفریق را در پایین می نویسیم و این کار را برای سایر سطوح نیز انجام می دهیم . همچنین در تفریق عدد 7 از عدد 6 ابتدا 8 واحد به صورت قرضی به عدد 6 داده می شود تا عدد 14 حاصل شود ( بنابراین باید یک واحد از طبقه ی سمت چپ کم شود اما چون رقم سمت چپ ،صفر است و کم کردن از آن امکان پذیر نیست ابتدا یک واحد از عدد 4 کم می کنیم ، سپس 8 واحد به عدد صفر اضافه کرده و در نهایت یک واحد از آن کم می کنیم.
سیستم شانزده تایی
سیستم شانزده تایی ، کمی با سیستم های قبلی فرق دارد : چون مبنا از ده بزرگ تر است ،ارقام معمولی برای نمایش اعداد در این پایه کافی نیستند . بنابراین ، برای نمایش اعدا در این پایه کافی نیستند . بنابراین ، برای نمایش ارقام این سیستم از ارقام 0 تا 9 و شش نماد – که به ترتیب A , B , C , D , E , Fنشانگر اعداد دهدهی 10 ، 11 ، 12 ، 13 ، 14 و 15 هستند – استفاده می شود . در این سیستم ارزش هر طبقه ،16 برابر ارزش طبقه ی سمت راست آن است .

جدول زیر اعداد 0 تا 15 را در مبناهای 2 و 8 و 16 نشان می دهد .
تبدیل مستقیم توان های دو
با توجه به آن که اعداد 8 و 16 توان هایی از 2 هستند ، می توان آن ها را به روش ساده ای به هم تبدیل کرد . در این روش ابتدا عدد را در مبنای 2 و سپس به مبنای مورد نظر تبدیل می کنیم . مثلا در تبدیل از مبنای 2 به مبنای 16 ، هر چهار رقم در مبنای 2 معادل یک رقم در مبنای 16 است .
به همین ترتیب هر سه رقم در مبنای 2 معادل یک رقم در مبنای 8 است.
تبدیل مبنای ۲ به ۸ و بالعکس
برای تبدیل مبنای ۸ به ۲ کافی است به جا هر رقم معادل ۳ بیتی آن را ازجدولدودهی قرار دهیم.
2(011 101 100)=2(?)=8(354)
برای تبدیل مبنای ۲ به ۸ از سمت راست ۳ بیت ۳ بیت جدا می کنیم.اگرتعدادبیتها مضربی از ۳ نبوداز سمت چپ صفر اضافه می کنیم.آنگاه معادل۳بیتی های جدا شده را از جدول زیر می نویسیم.
8(?) =2(1101111011)
8(1573)=2(001'101'111'011)
تبدیل مبنای ۲ به ۱۶ و بالعکس
برای تبدیل مبنای ۱۶ به ۲ کافی است به جای هر رقم مهادل ۴ بیتی آن رااز جدول زیر قرار دهیم.
B 5 7)16=(?)2=(1011 0101 0111)2)
برای تبدیل مبنای ۲ به ۱۶ از سمت راست۴ بیت ۴ بیت جدا می کنیم.اگر تعداد بیتها مضربی از ۴ نبود از سمت چپ صفر اضافه می کنیم.آنگاه معادل ۴بیتی های جدا شده را از جدول فوق می نویسیم.
16(?)=2(10110110111010):A
A:(0010'1101'1011'1010'0001)2=(2DBA1)16
تبدیل مبنای ۸ به ۱۶ و بالعکس
برای اینکار ساده تر این است که ابتدا عدد را به مبنای ۲ برده و سپس به مبنای دیگر ببریم.
A:(A36)16=(?)8
A:(A36)=(1010 0011 0110)2=(101'000'110'110)2=(5066)8
یعنی عدد هگز را چهار بیت چهار بیت به مبنای ۲ برده سپس ۳ بیت ۳ بیت از سمت راست جدا می کنیم.
A:(753)8=(?)16
A:(753)8=(111 101 011)=(1'1110'1011)=(1EB)16
یعنی عدد مبنای ۸ را ۳ بیت ۳بیت به مبنای ۲ برده سپس ۴ بیت ۴ بیت از سمت راست جدا می کنیم.
تبدیل اعداد ممیزی مبنای ۱۰ به ۲
قسمت صحیح آن طبق معمول تبدیل می شود(تفریق متوالی یا تقسیم متوالی).برای تبدیل قسمت اعشاری آن را ضرب در ۲ می کنیم.سپس قسمت صحیح عدد حاصله را بعنوان اولین رقم برای بعد از ممیز در مبنای دو در نظر میگیریم.بخش اعشاری عدد حاصله را دوباره رب در ۲ می کنیم و قسمت صحیح عدد حاصله را بعنوان رقم دوم بعد از ممیز در مبنای دو در نظر می گیریم.این عملیاترا آنقدر ادامه می دهیم تا قسمت اعشاری صفر شود یا به دقت موردنظربرسیم.
A:(13)10=(1101)2
F:(13.75)10=(1101.11)2
نمایش اعداد منفی در کامپیوتر
برای نمایش اعداد منفی سه روش وجود دارد.
۱ـ روش علامت ـ مقدار
۲ـ روش متمم یک
۳ـ متمم دو
۱ـ در این روش اعداد منفی بصورت اعداد مثبت نمایش داده می شوند و بیت سمت چپ عدد،علامت آن رانشان می دهد که اگر صفر باشد عدد مثبت است و اگر یک باشد عدد منفی است.
این روش دو اشکال دارد :
الف: برای صفر دو نماد وجود دارد(صفر مثبت و صفر منفی
ب: عل تفریق در این سیستم مشکل است و نیاز به مدار جداگانه ای دارد.
۲ـ روش متمم یا مکمل ۱
در این روش نیز بیت سمت چپ علامت دد است.در این روش برای بدست آوردن منفی یک عدد بیتهای آن معکوس می شود یعنی صفر به یک و یک به صفر تبدیل می شود مثلاً ۱۲+ و ۱۲- در این سیستم در یک بایت بصورت زیر ذخیره می شود:
11001111 < _______________ 12-
00001100 <________________ 12
در این سستم هنوز صفر با ۲ نماد نشان داده می شود(۱۱۱۱۱۱۱۱،۰۰۰۰۰۰۰۰)
و این ایراد آن است.ولی در این سیستم می توا عمل تفریقرا تبدیل به جمع کرد و لذا طراحی مارات ساده تر می شود.برای تفریه A-B کافی است A را بعلاوه متمم ۱ عدد B کنیم و بیت خروجی از بایت را بعلاوه حاصل جمه کنیم.
۳ـ روش متمم دو
برای بدست آوردن متمم ۲ می بایست ابتدا متمم ۱ را بدست آورده سپس ۱ واحد به آن اضافه کنیم.
مثال. برای بدست آوردن مکمل2 عدد 56 ابتدا مکمل1 آن محاسبه سپس یک واحد به آن اضافه می شود.
A: 56 = 00111000b
A: 1’s complement = 11000111
11001000= A: 2’s Complement = 11000111+1