تبدیل مبناها به یکدیگر
خب تو این پست میخوام تبدیل مبناهای مختلف به همدیگرو بهتون بگم . البته میدونم که همتون بلدید و مطالب بهتر از این وبلاگ کوچولو رو میتونید مثل آب خوردن گیر بیارید ولی من مینویسم شاید به درد کسی خورد و تونست از این مطالب استفاده کنه .
دوستان من یه برنامه نوشتم که تبدیل مبنا ها رو انجام میده . تبدیل مبناهای 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. برای تبدیل اعداد اعشاری
برچسب :
تبدیل مبنای 16 به 10