در این جلسه تیم کدگیت را با آموزش تبدیل اعداد هگزادسیمال به دهدهی در جاوا همراهی کنید. پیش نیاز این آموزش شامل موارد زیر است:
هگزادسیمال چیست؟
هگزادسیمال (Hexadecimal) که به اختصار هگز (Hex) نیز نامیده میشود، یک سامانه عدد نویسی است که بر مبنای ۱۶ بوده و برای نمایش دادن آن از ۱۶ سمبل استفاده میشود. اعداد ۰ تا ۹ به صورت عادی (یعنی همان اعداد ۰ تا ۹) و اعداد ۱۰ تا ۱۵ را با حروف A(ده) و B(یازده) و C(دوازده) و D(سیزده) و E(چهارده) و F(پانزده) نشان میدهند.
برخی از کاربران در ابتدا در ۱۶هی بودن این سیستم شک میکنند، چون ما از عدد ۰ استفاده میکنیم تا ۱۵، درواقع ما ۱۶ عدد برای انتخاب کردن خواهیم داشت مثل ۱۰هی بودن اعداد عادی که از ۰ شروع میشوند تا ۹.
اکثر اعدادی که روزانه از آنها استفاده میکنیم، بر پایه ۱۰ هستند یعنی ۱۰ کاراکتر برای نشان دادنشان کافی است، از اعداد ۰ تا ۹ اسم این سیستم دسیمال است. ولی همانطور که گفته شد، در سیستم عددنویسی هگز، ما از ۱۶ کاراکتر استفاده میکنیم.
نکته: هگز یا همان هگزادسیمال نباید با دسیمال اشتباه گرفته شود. این دو سیستم کاملاً جدا هستند. دسیمال به معنای ۱۰ و هگز به معنای ۶ است در نتیجه هگزادسیمال میشه ۱۶.
سیستم هگزادسیمال در رشتههای کامپیوتر و ریاضی کاربردهای فراوانی دارد. از برنامه نویسی سطح پایین گرفته تا کد رنگ صفحات HTML تا دیباگ کردن برنامهها. اما نحوه نمایش هگز در سیستمهای مختلف متفاوت است.
مثلاً در سیستمهای یونیکس و شبه یونیکس (و بسیاری از سیستمهای دیگر) دو کاراکتر ۰x در اول مقدار هگز نشان داده میشود (مثلاً ۰xAA یا ۰x2F4) در برخی از سیستمها و صفحات HTML کدهای رنگ بصورت ترکیبی از کاراکترهای هگز نشان داده میشود که در اول آنها # قرار میگیرد (مثلاً #FFFFFF – # قبل از FFFFFF است). در زبان اسمبلی پردازندههای اینتل، پس از مقادیر هگز یا h یا H قرار داده میشود (مثلاً 2h یا A6H) و …( bytegate.ir)
تبدیل اعداد هگزادسیمال به دهدهی
برای تبدیل هگزادسیمال به دهدهی باید مراحل زیر را انجام دهید:
- عدد هگزادسیمال را بگیرید.
- هر عدد را در 16 به توان خانه ای که در آن است ضرب کنید.
- تمام حاصلضرب ها را با هم جمع کنید.
عدد 12eb را در نظر بگیرید. عدد b معادل 11 است و در خانه صفر قرار دارد پس حاصل میشود
11*160
عدد e میشود معادل 14 است و در خانه 1 قرار دارد پس حاصل میشود
14*161
به طور کلی حاصل به صورت زیر میشود:
12eb = 11*160 + 14*161 + 2 * 162+ 1*163 = 4843
تبدیل اعداد هگزادسیمال به دهدهی در جاوا
برای تبدیل اعداد هگزادسیمال به دهدهی در جاوا ما یک متد به نام hex2decimal مینویسیم که یک string ورودی میگیرد و خروجی int برمیگرداند. کد تبدیل اعداد هگزادسیمال به دهدهی در جاوا به صورت زیر است:
public static int hex2decimal(String s) {
String digits = "0123456789ABCDEF";
s = s.toUpperCase();
int val = 0;
for (int i = s.length()-1 , j = 0; i >= 0; i--,j++) {
char c = s.charAt(i);
int d = digits.indexOf(c);
val += Math.pow(16, j) * d;
}
return val;
}
همانطور که در کد تبدیل اعداد هگزادسیمال به دهدهی در جاوا میبینید متغیری به نام digits تعریف کردیم و کاره این متغیر این است که معادل دهدهی یک عدد هگزادسیمال را به ما بدهد.(مثلا به جای a به ما 10 بدهد).سپس یک for نوشتیم به طول عدد هگزادسیمال خودمان و در آخر تمام حاصلضرب ها را با هم جمع میکنیم و در خروجی برمیگردانیم.
دلیل تعریف دو متغیر در for این است که رشته ورودی از چپ خوانده میشود ولی اعداد از راست!! به همین دلیل متغیر i اشاره به اول عدد هگزادسیمال و متغیر j اشاره به خانه واقعی آن هر عدد دارد.
تست تبدیل اعداد هگزادسیمال به دهدهی در جاوا
برای تست کدهای بالا، کد main زیر را بنویسید:
public static void main(String[] args) {
System.out.println(hex2decimal("12eb"));
}