درک چگونگی تبدیل اعداد باینری در مبنای 2 به اعداد دسیمال در مبنای 10 و بطور کلی تبدیل اعداد از مبنایی به مبنای دیگر نیازمند آموزش و مثال تشریحی است که در این مطلب با مثال های گوناگون به آموزش تبدیل مبنای اعداد به یکدیگر می پردازیم.
اعداد باینری و دسیمال؛ نحوه عملکرد مدارهای منطقی
با در نظر گرفتن انواع مدارهای پردازش سیگنال های سیستم که شامل مدارهای غیرخطی، آنالوگ و دیجیتالی هستند، بر خلاف مدارهای آنالوگ و غیرخطی که مسئولیت پردازش سیگنال هایی با دامنه و فرکانس متغیر را بر عهده دارند، مدارهای دیجیتالی سیگنال هایی را پردازش می کنند که فقط دو حالت یا دو سطح ولتاژ دارند و این حالت ها عبارتند از "0 منطقی" و "1 منطقی" . این دو سطح ولتاژ، در مدارهای دیجیتالی و کامپیوتری ارقام باینری نامیده می شوند.
از آنجایی که عناصر مورد استفاده در سیستمهای دیجیتال معمولا 2 حالته هستند، مثلا ترانزیستورهای مورد استفاده در سیستمهای دیجیتال در یکی از دو حالت خاموش یا روشن عمل میکنند، دو رقمی بودن مبنا 2 موجب شده است که این مبنا تناسب بیشتر با ذات سیستمهایِ دیجیتالِ مورد استفاده در دنیای امروز داشته باشد و در طراحی و تحلیل مدارهای منطقی مبنای 2 از اهمیت زیادی برخوردار باشد. برای کسب اطلاعات بیشتر درباره مدار منطقی (Logic Circuit) می توانید به معرفی، بررسی و آموزش مدار منطقی مراجعه کنید.
تمامی سیستم های کامپیوتری و دیجیتالی بر اساس اعداد باینری و دسیمال (مبنای 2 و مبنای 10) کار می کنند؛ بنابراین دانش تبدیل اعداد از مبنای باینری به دسیمال (مبنای 2 به 10) از اهمیت بالایی برخوردار است.
آشنایی با انواع مبنا و نمایش اعداد در مبناهای مختلف
قبل از اینکه بخواهیم به بررسی دقیق و تخصصی تبدیل یک عدد از یک مبنا به یک مبنا دیگر بپردازیم، نیاز است که کمی با نحوه نمایش اعداد آشنا شویم، برای نمایش اعداد میتوان از رشتهای از Symbolها استفاده کرد، که به هر سیمبل یک رقم میگوییم، بعنوان مثال همه افراد عادی، عادت دارند برای بیان و یا نوشتن اعداد از 10 رقم 0 تا 9 استفاده کنند، حال به تعداد سیمبلها (ارقام) برای نمایش یک عدد استفاده میکنیم، مبنای آن عدد گفته میشود.
درست است که انسانها در زندگی روزمره برای بیان و نوشتن اعداد از مبنای 10 (Decimal) استفاده میکنند ولی اگر بخواهیم در حالت کلی تر این موضوع را بررسی کنیم، میتوان برای نمایش اعداد از تعداد ارقامِ بیشتر از 10 یا کمتر از 10 استفاده کرد. بعنوان مثال در مبنای 2 ارقامی که برای بیان، نوشتن و یا نمایش اعداد استفاده میشود 0 و 1 است، در مبنای 8 ارقامی که برای بیان، نوشتن و یا نمایش اعداد استفاده میشود 0، 1، 2، ...، 7 است. وقتی که مبنا اعدادمان بزرگتر از 10 است، معمولا برای نمایش دادن ارقام بعد از 9 از حروف الفبای انگلیسی استفاده میکنند، بعنوان مثال ارقام مورد استفاده برای ساختن اعداد مبنای 16 عبارتند از:
$$ 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F $$
بطور کلی برای نمایش یک عدد در مبنای r از ارقام 0 تا r-1 یعنی r تا رقم استفاده میشود. بطور کلی عدد A در مبنای r را میتوان به صورت زیر نمایش داد:
\[A=\ {(a_{n-1}a_{n-2}...a_1a_0.a_{-1}a_{-2}...a_{-m})}_r\]
در عبارت بالا هر رقم مثل \(a_i\) در مبنای r دارای ارزش \(r^i\) است.
برای تبدیل یک عدد از یک مبنا به یک مبنای دیگر، سه حالت مختلف را در نظر میگیریم که در این قسمت به توضیح این حالتها میپردازیم.
1- تبدیل از مبنای r به مبنای 10
تبدیل یک عدد از مبنای r به مبنای 10 معادل به دست آوردن مقدار عددی آن عدد است. در فیلم زیر نحوه تبدیل یک عدد که مبنایی به جز 10 دارد به یک عدد مبنا 10 توضیح داده شده است.
برای اینکه به تبدیل یک عدد از مبناهای غیر از 10 به مبنا 10 مسلط شوید در فیلم زیر مثال های دیگری برای شما عزیزان حل شده است.
اگر بخواهیم تبدیل یک عدد از مبنای r به مبنای 10 را بصورت متنی توضیح دهیم خواهیم داشت:
برای این منظور هر رقم را در ارزش آن رقم ضرب میکنیم و مقادیر بدست آمده را با هم جمع میکنیم.
\[A=\ {(a_{n-1}a_{n-2}...a_1a_0.a_{-1}a_{-2}...a_{-m})}_r=\ a_{n-1}\times r^{n-1}+a_{n-2}\times r^{n-2}+...\ +a_0\times r^0+a_{-1}\times r^{-1}+...+a_{-m}\times r^{-m}\]
مثال: عدد \(N = (10100)_{2}\) را به مبنای 10 تبدیل کنید.
\[(\overbrace {1}^{4}\overbrace{0}^{3}\overbrace{1}^{2}\overbrace{0}^{1}\overbrace{0}^{0} )=1\times 2^2+1\times 2^4=4+16=20\]
بنابراین:
$$ (10100)_{2} = (20)_{10} $$
مثال: عدد \(N = (A60)_{16}\) را به مبنای 10 تبدیل کنید.
$$ (A60)_{16} = 10\times 16^2 + 6\times16^1 + 0\times16^0 = 2656 $$
بنابراین:
$$ (A60)_{16} = (2656)_{10} $$
2- تبدیل از مبنای 10 به مبنای r
در فیلم زیر نحوه تبدیل از مبنای 10 به سایر مبنا ها توضیح داده شده است
اگر بخواهیم نحوه تبدیل از مبنای 10 به سایر مبنا ها را بصورت متنی توضیح دهیم خواهیم داشت:
فرض کنید عدد N در مبنای 10 است و میخواهیم این عدد را به مبنای r تبدیل کنیم، فرض کنید این کار را انجام دادهایم بنابراین در نهایت میتوانیم عبارت زیر را بنویسیم:
\[{\left(N\right)}_{10}=\ {\left(b_{n-1}b_{n-2}\dots b_1b_0.b_{-1}b_{-2}\dots b_{-m}\right)}_r\ \Rightarrow {\left(N\right)}_{10}=\ b_{n-1}\times r^{n-1}+b_{n-2}\times r^{n-2}+...\ +b_0\times r^0+b_{-1}\times r^{-1}+...+b_{-m}\times r^{-m}\]
حال اگر بتوانیم از درون عبارت زیر \(b_i\) ها را بدست آوریم در واقع توانستهایم محاسبه کنیم که عدد N در مبنای 10 معادل چه عددی در مبنای r است.
با توجه به صحبتهای بالا میتوانیم قسمت صحیح و اعشار عدد را بصورت جداگانه نیز نشان دهیم، فرض میکنیم بخش صحیح و بخش کسری عدد N به ترتیب برابر باشد با \( N_{I} \) و \( N_{f} \) ، I مخفف Integral یعنی بخش صحیح عدد و f مخفف Fractional یعنی بخش اعشاری عدد است.
\[N_I=\ {\left(b_{n-1}b_{n-2}\dots b_1b_0\right)}_r\ \Rightarrow {\left(N\right)}_I=\ b_{n-1}\times r^{n-1}+b_{n-2}\times r^{n-2}+...\ +b_1\times r^1+b_0\] \[N_f=\ {\left(0.b_{-1}b_{-2}\dots b_{-m}\right)}_r\ \Rightarrow {\left(N\right)}_f=b_{-1}\times r^{-1}+b_{-2}\times r^{-2}+...+b_{-(m-1)}\times r^{-(m-1)}+b_{-m}\times r^{-m}\] \[N=N_I+N_f\]
روش محاسبه \(b_i\) های بخش صحیح عدد و بخش اعشاری عدد متفاوت است، به همین دلیل برای تبدیل عدد N از مبنای 10 به مبنای r ، به صورت زیر عمل میکنیم:
-
برای یافتن معادل قسمت صحیح N باید باید \(b_0\)، \(b_1\)، ... تا \(b_{n-1}\) را بیابیم، حال برای این کار، از تقسیم متوالی بخش صحیح عدد N یعنی \( N_{I} \) به مبنای r استفاده میکنیم:
$$ N_{I} = \{[...(b_{i-1}r + b_{i-2})r + ... + b_{2}]r + b_{1}\}r + b_{0} : 0 \le b_{i} \le r - 1 $$
با توجه به عبارت بالا مشخص است که اگر \( N_{I} \) را بر r تقسیم کنیم، رقم \( b_{0} \) به عنوان باقیمانده و \( (...(b_{i-1}r+b_{i-2})r + b_{1} \) به عنوان خارجقسمت به دست میآید، یعنی با اولین باری که ما عبارت بالا را بر r تقسیم کردیم توانستیم کم ارزش ترین رقم (\( b_{0} \)) صحیح عدد مبنای r معادل با عدد N در مبنای 10 را بدست آوریم. حال با تقسیم خارجقسمت بر r رقم \( b_{1} \) به دست میآید و این کار تا وقتی به خارجقسمتی کوچکتر از r برسیم، به همین شکل ادامه پیدا میکند، با این کار توانستهایم \( b_{i} \) های صحیح را محاسبه کنیم.
-
برای یافتن معادل قسمت اعشاری N باید باید \(b_{-1}\)، \(b_{-2}\)، ... تا \(b_{-m}\) را بیابیم، حال برای این کار، از ضرب متوالی بخش کسری عدد N یعنی \( N_{f} \) در مبنای r استفاده میکنیم:
$$ N_{f} = r^{-1}\{b_{-1}+ r^{-1}[b_{-2}+r^{-1}(b_{-3} + ... )]\} : 0 \le b_{i} \le r - 1 $$
بنابراین اگر \( N_{f} \) را در r ضرب کنیم، رقم \( b_{-1} \) به عنوان بخش صحیح حاصلضرب و \( r^{-1}[b_{-2}+r^{-1}(b_{-3} + ...)] \) به عنوان بخش کسری حاصلضرب به دست میآید. با ضرب بخش کسری حاصل در r رقم \( b_{-2} \) به دست میآید و این کار تا "∘" شدن بخش کسری، به همین شکل ادامه پیدا میکند.
مثال: عدد \( N = (25.625)_{10} \) را به مبنای 2 تبدیل کنید.
تبدیل بخش صحیح: ابتدا عدد 25 را بر 2 تقسیم میکنیم، خارجقسمت برابر 12 و باقیمانده برابر 1 است که این باقیمانده بیت \( b_{0} \) را نشان میدهد. حال 12 را بر 2 تقسیم میکنیم، خارجقسمت برابر 6 و باقیمانده برابر "∘" است که این باقیمانده بیت \( b_{1} \) را نشان میدهد. با تقسیم 6 بر 2 خارجقسمت و باقیمانده به ترتیب برابر 3 و "∘" است که این باقیمانده بیت \( b_{2} \) را نشان میدهد. در نهایت با تقسیم 3 بر 2 به باقیمانده 1 و خارجقسمت 1 میرسیم که به ترتیب بیتهای \( b_{3} \) و \( b_{4} \) را نشان میدهد. بنابراین بخش صحیح عدد برابر است با: \( (11001)_{2} \)
تبدیل بخش کسری: ابتدا عدد 0.625 را در 2 ضرب میکنیم، که حاصل برابر 1.25 میشود. رقم صحیح به دست آمده یعنی 1 اولین بیت پس از ممیز یعنی \( b_{-1} \) را نشان میدهد. با ضرب بخش کسری یعنی 0.25 در 2، حاصل برابر 0.5 میشود که بخش صحیح یعنی "∘" بیت \( b_{-2} \) را نشان میدهد. در نهایت با ضرب بخش کسری 0.5 در 2، بیت \( b_{-3} \) برابر 1 به دست میآید. بنابراین بخش کسری عدد برابر است با: \( (0.101)_{2} \)
روابط زیر این مراحل را نشان میدهد:
0.625×2 = 1.25 0.25×2 = 0.5 0.5×2 = 1.0 |
بنابراین داریم:
$$ (25.625)_{10} = (11001.101)_{2} $$
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096
مثال: عدد \(N = (593)_{10}\) را به مبنای 2 تبدیل کنید.
بزرگترین توان 2 که امکان کم کردن آن از عدد 593 وجود دارد عدد 512 است، سپس میتوان به ترتیب اعداد 64، 16 و 1 را از باقیمانده کم کرد (روابط زیر را ببینید).
593 - 512 = 81
81 - 64 = 17
17 - 16 = 1
1 - 1 = 0
بنابراین در معادل مبنای 2 این عدد در محلهایی به وزن 1، 16، 64 و 512 بیت 1 و در سایر محلها بیت "∘" داریم. یعنی:
$$ (593)_{10} = (1001010001)_{2} $$
مثال: برای نمایش عدد \(N = (345)_{10}\) در مبنای 2 به چند بیت نیاز داریم؟
از آنجا که \(2^8 = 256 \le 345 \lt 2^9 = 512\) برای نمایش این عدد در مبنای 2 به 9 بیت نیاز داریم.
مثال: عدد \(N = (451.5)_{10}\) را به مبنای 16 تبدیل کنید.
روابط زیر مراحل تبدیل را نشان میدهد:
0.5×16 = 8.0 |
بنابراین داریم:
$$ (451.5)_{10} = (1E3.8)_{16} $$
3- تبدیل از مبنای \( r_{1} \) به مبنای \( r_{2} \)
برای تبدیل یک عدد از مبنای \( r_{1} \) به مبنای \( r_{2} \) ، ابتدا عدد را از مبنای \( r_{1} \) به مبنای 10 تبدیل کرده و سپس عدد را از مبنای 10 به مبنای \( r_{2} \) تبدیل میکنیم.
مثال: عدد \(N = (23.3)_{5}\) را به مبنای 2 تبدیل کنید.
ابتدا عدد را به مبنای 10 تبدیل میکنیم:
$$ (23.3)_{5} = 2\times5^1 + 3\times5^0 + 3\times5^{-1} = (13.6)_{10} $$
حال عدد 13.6 را به مبنای 2 تبدیل میکنیم:
0.6×2 = 1.2 0.2×2 = 0.4 0.4×2 = 0.8 0.8×2 = 1.6 |
13 - 8 = 5 5 - 4 = 1 1 - 1 = 0 |
بنابراین داریم:
$$ (13.6)_{10} = (1101.\overline{1001})_{2} $$
مثال: فرض کنید عدد N در مبنای \( r_{1} \) با \( n_{1} \) رقم نمایش داده شده است. اگر بخواهیم این عدد را به مبنای \( r_{2} \) تبدیل کنیم، تعداد رقمهای مورد نیاز در مبنای جدید چقدر است؟
تعداد رقمهای مورد نیاز در مبنای مقصد باید به گونهای باشد که بتوان بزرگترین عدد قابل نمایش در مبنای \( r_{1} \) با \( n_{1} \) رقم را در مبنای مقصد نمایش داد. از این رو بزرگترین عدد قابل نمایش با \( n_{1} \) رقم در مبنای مبدأ باید از بزرگترین عدد قابل نمایش در مبنای مقصد کوچکتر باشد، بنابراین اگر فرض کنیم \( n_{2} \) تعداد رقمهای مورد نیاز برای نمایش عدد N در مبنای \( r_{2} \) باشد، باید رابطه \( r_{1}^{n1} - 1 \le r_{2}^{n2} -1 \) برقرار باشد.
$$ r_{1}^{n1} - 1 \le r_{2}^{n2} -1 \Rightarrow n_{1} log r_{1} \le n_{2} log r_{2} \Rightarrow n_{2} \ge n_{1} \frac{logr_{1}}{logr_{2}} \Rightarrow n_{2}\lceil n_{1}\frac{logr_{1}}{logr_{2}}\rceil $$
$$ n_{2}\lceil n_{1}\frac{logr_{1}}{logr_{2}}\rceil $$
مثال: تعداد بیتهای لازم برای نمایش یک عدد 3 رقمی دهدهی در مبنای 2 چیست؟
$$ n_{2}\lceil n_{1}\frac{logr_{1}}{logr_{2}}\rceil = \lceil 3\frac{log10}{log2}\rceil = \lceil 3\frac{1}{0.301}\rceil = 10 $$
مثال: عدد \(N = (01101001101001.010111)_{2}\) را به مبنای 16 تبدیل کنید.
از آنجا که در این مثال \( r_{1}=2 , r_{2}=2^4\) بنابراین 4 = k است.
$$ N = (\underbrace{0001}_{1} \underbrace{1010}_{A} \underbrace{0110}_{6} \underbrace{1001}_{9}.\underbrace{0101}_{5}\underbrace{1100}_{c})_{2} = (1A69.5C)_{16} $$
مثال: عدد \(N = (C41.5A)_{16}\) را به مبنای 2 تبدیل کنید.
از آنجا که در این مثال \( r_{2}=2 , r_{1}=2^4\) بنابراین 4 = k است.
$$ N = ( \underbrace{ C }_{1100} \underbrace{ 4 }_{0100} \underbrace{ 1 }_{0001} . \underbrace{ 5 }_{0101} \underbrace{ A }_{1010} )_{16} = (110001000001.0101101)_{2} $$