تبدیل مبنا ها در سی شارپ
با سلام امروز میخواهیم به دور روش مبنای هارو بهم تبدیل کنیم.در روش اول به کمک نوشتن دستورات خودمان این کار را انجام می دهیم و در روش دوم به کمک امکانی که خود سی شارپ به ما می دهد.در این اموزش فرض بر این است که شما با مبنا ها اشنایی دارید و به طور گذرا روش حل ان را یاد اوری میکنیم و هدف اضلی اموزش کد های سی شارپ مبنا ها است.
مبنای 10 به 2
برای تبدیل مبنای 2 به 10 باید عدد مبنای 10 را به صورت متوالی در 2 تقسیم کنیم تا زمانی که خارج قسمت 0 شود و در اخر باقیمانده را از راست به چپ می نویسیم به شکل زیر:
1 2 3 4 5 6 7 8 9 10 11 12 | int i,f; string m = ""; f =Convert.ToInt32( Console.ReadLine()); while (f > 0 ) { i = f % 2; m += i; f = f / 2; } char[] ch = m.ToCharArray(); Array.Reverse(ch); Console.WriteLine(ch); |
در اینجا از reverse برای از راست به چپ خواندن عدد استفاده کردیم و در مثال بعدی از حلقه.
مبنای 2 به 10
برای تبدیل مبنای 2 به 10 به هر عدد از سمت راست به چپ یک موقعیت که از صفر شروع می شود می دهیم سپس هر عدد را ضربدر 2 به توان موقعیتش می کنیم:
1 2 3 4 5 6 7 8 9 | string f = Console.ReadLine(); char[] s = f.ToCharArray(); int n=1, m=0; for (int i=s.Length-1;i>=0;i--) { char t = s[i]; m += (int.Parse(s[i].ToString())) * n; n *= 2; } Console.WriteLine(m.ToString()); |
مبنای 10 به 16
باید مانند روش 10 به 2 تقسیم های متوالی انجام دهیم با این تفاوت که اینجا در 16 تقسیم میکنیم تا زمانی که 0 شود سپس اعداد را از راست به چپ مینویسیم.در مبنای 16 باید اعداد 10 و 11 و 12 و 13 و 14 و 15 و 16 را به ترتیب با نماد های a و b و c و d و e و f نشان دهیم.اینکار را به کمک دستور سوییچ انجام می دهیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | int i,f; string m = ""; f =Convert.ToInt32( Console.ReadLine()); while (f > 0 ) { i = f % 16; switch (i) { case 10:m +="A" ;break; case 11: m += "B"; break; case 12: m += "C"; break; case 13: m += "D"; break; case 14: m += "E"; break; case 15: m += "F"; break; default: m += i;break; } f = f / 16; } char[] ch = m.ToCharArray(); Array.Reverse(ch); Console.WriteLine(ch); |
مبنای 16 به 10
مانند روش دوم به هر عدد یک موقعیت از راست به چپ می دهیم که این موقعیت ها از 0 شروع می شوند.سپس هر رقم را ضرب در 16 به توان موقعیت می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | string f = Console.ReadLine(); char[] s = f.ToCharArray(); int n=1, m=0; for (int i=s.Length-1;i>=0;i--) { char t = s[i]; switch (t) { case 'A': m += 10 * n; break; case 'B': m += 11 * n; break; case 'C': m += 12 * n; break; case 'D': m += 13 * n; break; case 'E': m += 14 * n; break; case 'F': m += 15 * n; break; default: m += (int.Parse(s[i].ToString())) * n; break; } n *= 16; } Console.WriteLine(m.ToString()); |
اگر به کد ها دقت کنید متوجه شباهت و نزدیکی ان ها می شوید و تلاش شده به ساده ترین شکل نوشته شوند.
خب ما در اینجا مبنا های 10 و 16 و 2 را بررسی کردیم به کمک کد هایی که خودمان نوشتیم حالا می خواهیم به وسیله امکانی که خود سی شارپ به ما می دهد این کار را انجام دهیم
در روش اول به سادگی بدون نیاز به فضای نامی خاصی از دستور زیر استفاده می کنیم:
1 2 | برای تبدیل 2 به 10// Console.WriteLine(Convert.ToInt32("11001", 2)); |
و در روش دوم از فضای نامی
1 | using System.Globalization; |
استفاده میکنیم و کدمان به این صورت می شود:
1 2 | نمایش در مبنای 16// Console.WriteLine(int.Parse("25",NumberStyles.HexNumber)); |
به پایان این اموزش رسیدیم امیدوارم اموزش مفید بوده باشد .
موفق باشید.
عالی بود
سلام نظر لطف شماست
سلام
اگر بخایم بدون استفاده از آرایه این کار رو بکنیم اونوقت الگوریتمش چه جوری میشه؟؟
سلام و درود
میشه از متد Append استفاده کرد تا دیگه از آرایه استفاده نشه .
موفق و پیروز باشید.