تبدیل مبناها به یکدیگر

خب تو این پست میخوام تبدیل مبناهای مختلف به همدیگرو بهتون بگم . البته میدونم که همتون بلدید و مطالب بهتر از این وبلاگ کوچولو رو میتونید مثل آب خوردن گیر بیارید ولی من مینویسم شاید به درد کسی خورد و تونست از این مطالب استفاده کنه .

دوستان من یه برنامه نوشتم که تبدیل مبنا ها رو انجام میده . تبدیل مبناهای 2 به 8 ، 10 ، 16 تبدیل مبنای 8 به 2 ، 10 ، 16 تبدیل مبنای 10 به 2 ، 8 ، 16 ، و بالاخره تبدیل مبنای 16 به 2 ، 8 ، 16 . هم چنین این برنامه قابلیت جمع و ضرب و تقسیم و تفریق تو مبناهای مختلف رو هم داره که میتونید از اینجا سورس کد ++C,C و exe یا همون فایل اجراییش رو دانلود کنید .

مبنایی که به صورت عام استفاده میشه مبنای ۱۰ هست ولی کامپیوتر از مبنای ۲ برای نمایش و محاسبه ی اطلاعات استفاده میکنه . فرض کنید که مبنای ما r هست . اعداد 0 تا r-1 رقم های این مبنا رو تشکیل میدن در نتیجه داریم :

our system is decimal system and r is 10 ( = base ten ) --> digits are : 0,1,...,8,9 = r-1 = 10-1

in binary system ( = base two ) r = 2 --> digits are : 0,1

in octal system ( = base eight) r = 8 --> digits are : 0,1,...,6,7

and finally, in hexadecimal number system ( = base sixteen ) r is 16 --> digits are : 0,1,...,14,15

خب برای اینکه اعداد 10 تا 15 در مبنای 16 با 1,0 و ... و 1,5 اشتباه نشن ما از حروف A to F برای نمایش این اعداد استفاده میکنیم .

A=10, B=11, C=12, D=13, E=14, F=15

حالا بیاییم مبناها رو به هم تبدیل کنیم . تبدیل مبنای 2 به مبنای 8 و 16 و برعکس و تبدیل مبناهای 2 و 8 و 16 به مبناب 10 ، کار خیلی ساده ای هست و قسمت مشکل کار تبدیل مبنای 10 به مبنای 2 و 8 و 16 هست که اول این مطلب رو میگم .

خب روش رو برای تبدیل مبنای 10 به مبنای 2 میگم . تبدیل 10 به 8 و 16 هم مینطوره .

فرض کنید میخواید عدد 431 رو ببرید به مبنای 2 . (لقمه ی بزرگ تر از دهنم برداشتم ) داریم :

431/2 = 215 --> 1

215/2 = 107 --> 1

107/2 = 53 ---> 1

53/2 = 26 -----> 1

26/2 = 13 -----> 0

13/2 = 6 ------> 1

6/2 = 3 -------> 0

3/2 = 1 -------> 1

1/2 = 0 -------> 1

 حالا 0 و 1 های بدست آمده که درواقع باقیمانده های اون تقسیم مورد نظر هستن رو از پایین به بالا ، از چپ به راست بنویسید که عدد 110101111 به دست میاد که جواب مورد نظره . گرچه الان ماشین حسابهایی که تبدیل مبنا رو انجام میدن تو بازار هست ولی یاد گیریه اون تو زبان اسمبلی خیلی کاربرد داره .

یه روش ساده تر هم وجود داره که اونم میگم . برای این کار تقریبا باید توانهای 2 رو از بر باشید . توانهای دو عبارتند از :

1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, ...

اگه همون مثال قبلی رو بخوایم با این روش حل کنیم داریم :

512 > 431 > 256 ---> Answer = 0 + 256 + .... ---> 431-256 = 175

256 > 175 > 128 ---> Answer = 256 + 128 + .... ---> 175-128 = 47

128 > 64 > 47 > 32 ---> Answer = 256 + 128 + 0 + 32 ---> 47-32 = 15

32 > 16 > 15 > 8 ---> Answer = 256 + 128 + 0  + 32 + 0 + 8 ---> 15-8 = 7

8 > 7 > 4 ---> Answer = 256 + 128 + 0 + 32 + 0 + 8 + 4 ---> 7-4 = 3

4 > 3 > 2 ---> Answer = 256 + 128 + 0 + 32 + 0 + 8 + 4 + 2 ---> 3-2 = 1

2 > 1 >=1 --> Answer = 256 + 128 + 0 + 32 + 0 + 8 + 4 + 2 + 1 = 431

Answer = 256*(1) + 128*(1) + 64*(0) + 32*(1) + 16*(0) + 8*(1) + 4*(1) + 2*(1) + 1*(1)

Answer = 110101111

 یه مثال هم برای تبدیل مبنای ۱۰ به ۸ رو میگم تا جا بیوفته .

مثلا میخوایم همون ۴۳۱ رو به مبنای ۸ ببریم . داریم :

431/8 = 53 ---> 7

53/8 = 6 ------> 5

6/8 = 0 -------> 6

با همون روش قبلی اعداد به دست اومده که در واقع با قیمانده ی تقسیم مورد نظر هستن رو از پایین به بالا و از چپ به راست مینویسم که میشه 657 .

تفییر مبنای اعداد اعشاری :

خب بر فرض میخوایم عدد اعشاریه 0.729 رو ببریم تو مبنای 2 . روش کار همونه . ولی به جای تقسیم عدد رو ضرب در 2 کنیم که داریم :

0.729*2 = 1.458 ---> [1.458] = 1 ---> Answer = 0.1 ---> 1.458-1 = 0.458

0.458*2 = 0.916 ---> [0.916] = 0 ---> Answer = 0.10 ---> 0.916-0 = 0.916

0.916*2 = 1.832 ---> [1.832] = 1 ---> Answer = 0.101 ---> 1.832-1 = 0.832

0.832*2 = 1.664 ---> [1.664] = 1 ---> Answer = 0.1011 ---> 1.664-1 = 0.664

0.664*2 = 1.328 ---> [1.328] = 1 ---> Answer = 0.10111 ---> 1.328-1 = 0.328

0.328*2 = 0.656 ---> [0.656] = 0 ---> Answer = 0.101110 ---> 0.656-0 = 0.656

 وبه همین صورت تا الی آخر .  علامت [ ] هم جزو صحیح عدد رو میده . اگه یه عدد هم قسمت اعشاری داشت و هم قسمت صحیح این دو قسمت رو باید جداگانه تبدیل مبناشونو انجام بدیم بعد به هم بچسبونیم .

با توجه به پست قبلی و این پست داریم :

431.72910 = 110101111.1011102

 با همین روش میتونید اعداد اعشاری رو به مبنای 8 و 16 ببرید . خب حالا میخوایم یه عدد تو مبنای r رو به یه عدد تو مبنای 10 تبدیل کنیم . با مثال بگم بهتره :

1100111.1012= (1*26 + 1*25 + 0*24 + 0*23 + 1*22 + 1*21 + 1*20) . (1*2-1 + 0*2-2 + 1*2-3)

                  = (64 + 32 + 0 + 0 + 4 + 2 + 1) . (0.5 + 0 + 0.125) = 103.62510

243.128 = (2*82 + 4*81 + 4*80) . (1*8-1 + 2*8-2)

            = (128 + 32 + 4) . (0.125 + 0.015625) = 164.14062510

E3.7B16 =(14*161 + 3*160 ) . ( 7*16-1 + 11*16-2) =227.4804... (E=14 , B=11)

اینم از تبدیل 16 به 10 . دوستان واقعا آموزش این چیزا سخته . به هیچ وجه نمیشه توضیح داد . ببخشید

خب تا اینجا تبدیل 10 به مبنای r و برعکس رو یاد گرفتید . برای تبدیل مبنای r  به مبنای x باید مبنای r رو به مبنای 10 تبدیل کنید و عدد بدست اومده رو به مبنای  x ببرید . ولی برای تبدیل مبنای 2 به 8 یا 16 یه راه راحتر هست و جای گزینی اعداد دو دویی با اعداد هشت هشتی یا شانزده شانزدهی به روشی که میگم هست . برای تبدیل به 2 به هشت ، ارقام را 3 تا 3 تا جدا میکنیم و معادل هشت هشتی اونو جاش میذارید . اینجوری :

000=0, 001=1, 010=2, 011=3, 100=4, 101=5, 110=6, 111=7

11000110111.10011012 = 011 000 110 111 . 100 110 100

                                 = 011(=3) 000(=0) 110(=6) 111(=7) . 100(=4) 110(=6) 100(=4)

                                 = 3 0 6 7 . 4 6 4 = 3067.4648

برای تبدیل مبنای 2 به 16 اعداد رو 4 تا 4 تا جدا میکنیم و با معادل شانزده شانزدهی اون جای گزین میکنیم :

0000=0, 0001=1, 0010=2, 0011=3, 0100=4, 0101=5, 0110=6, 0111=7, 1000=8, 1001=9,

1010=10=A, 1011=11=B, 1100=12=C, 1101=13=D, 1110=14=E, 1111=15=F

111000110111.10011012 = 1110 0011 0111 . 1001 1010

                                    = 1110(=14=E) 0011(=3) 0111(=7) . 1001(=9) 1010(=10=A)

                                    = E 3 7 . 9 A = E37.9A16

به همین راحتی به همین خوشمزه گی . اگه مطالب مشکل داشت خبر بدید .

 


مطالب مشابه :


تبدیل مبناها به یکدیگر

تبدیل مبناهای 2 به 8 ، 10 ، 16 تبدیل مبنای 8 به 2 ، 10 ، 16 تبدیل مبنای 10 به 2 ، 8 ، 16 ، و بالاخره تبدیل




آموزش تبدیل مبنا ها

تبدیل مبنای ۱۰ به 16. یعنی عدد مبنای ۸ را ۳ بیت ۳بیت به مبنای ۲ برده سپس ۴ بیت ۴ بیت




اصول تبدیل اعداد

تبدیل از مبنای 2 به 16: برای تبدیل از مبنای 2 به مبنای 16 از ممیزبطرف راست وچپ اعداد را چهار




تبديل مبناها (مبانی سال دوم کامپیوتر)

تبديل مبناي 16 به 10 : 16=>10::: (9d7a)=(10*16^0)+(7*16^1)+(13*16^2)+(9*16^3)=40314




تبديل اعداد مبناي 16 به مبناي 2 در ديباگ

برای تبدیل اعداد مبنای 16 به مبنای 2 در دیباگ به یادگیری چند مورد نیاز داریم . استفاده از فلاگ




برنامه تبدیل مبنای 10 به مبنای 2 (++C & C)

برنامه تبدیل مبنای 10 به مبنای 2 برنامه تبدیل مبنای 10 به مبنای 2 (++c & c) برنامه زبان c:




خلاصه آموزشی از درس اسمبلی

تبدیل مبنای 2 به 16 و اعداد اعشاری مبنای 2 به مبنای 10. برای تبدیل اعداد اعشاری




برچسب :