سیداحمد
سیداحمد
خواندن ۳ دقیقه·۲ ماه پیش

چرا نتیجه عبارت Number("0x11") در جاوا اسکریپت عدد 17 می‌شود؟

برای پاسخ به این سوال، باید کمی درباره نحوه‌ی تفسیر اعداد در جاوا اسکریپت و همچنین تبدیل رشته‌ها به اعداد بدانیم.

  • تفسیر اعداد در جاوا اسکریپت:جاوا اسکریپت از چندین روش برای نمایش اعداد پشتیبانی می‌کند. یکی از این روش‌ها، استفاده از نمادگذاری هگزادسیمال (hexadecimal) است. اعداد هگزادسیمال با پیشوند 0x شروع می‌شوند و از ارقام 0 تا 9 و حروف A تا F تشکیل شده‌اند. هر رقم هگزادسیمال معادل ۴ بیت (نیم بایت) است.
  • تبدیل رشته به عدد:وقتی تابع Number() را روی یک رشته فراخوانی می‌کنیم، جاوا اسکریپت سعی می‌کند آن رشته را به یک عدد تبدیل کند. اگر رشته با یک عدد معتبر شروع شود، بقیه‌ی کاراکترها نادیده گرفته می‌شوند و عدد معادل آن برگردانده می‌شود.

تجزیه و تحلیل عبارت Number("0x11"):

  1. تشخیص پیشوند هگزادسیمال: جاوا اسکریپت با دیدن پیشوند 0x متوجه می‌شود که رشته‌ی ورودی به صورت هگزادسیمال نمایش داده شده است.
  2. تبدیل هر رقم هگزادسیمال به معادل ده‌دهی:0x1 برابر با عدد ده‌دهی 1 است.
    0x10 برابر با عدد ده‌دهی 16 است.
  3. محاسبه مقدار نهایی:در سیستم اعداد هگزادسیمال، هر رقم به توانی از ۱۶ می‌رسد. بنابراین، مقدار 0x11 برابر است با:1 * 16^1 + 1 * 16^0 = 16 + 1 = 17

چرا 0x10 برابر با 16 است؟

برای درک بهتر، بیایید به سیستم اعداد هگزادسیمال و ده‌دهی نگاهی بیندازیم:

  • سیستم اعداد ده‌دهی: این سیستم عددی که ما معمولاً استفاده می‌کنیم، بر پایه عدد 10 است. هر رقم در یک عدد ده‌دهی، می‌تواند از 0 تا 9 باشد.
  • سیستم اعداد هگزادسیمال: این سیستم بر پایه عدد 16 است. هر رقم در یک عدد هگزادسیمال، می‌تواند از 0 تا 9 و همچنین حروف A تا F باشد.

تبدیل از هگزادسیمال به ده‌دهی:

برای تبدیل یک عدد هگزادسیمال به ده‌دهی، هر رقم هگزادسیمال را به توانی از 16 می‌رسانیم و سپس نتایج را با هم جمع می‌کنیم. توان هر رقم، برابر با مکان آن رقم در عدد هگزادسیمال از راست به چپ است (شروع از صفر).

مثال: 0x10

  • رقم سمت راست (0) در مکان صفر قرار دارد. پس آن را در 16 به توان صفر ضرب می‌کنیم (16^0 = 1).
  • رقم سمت چپ (1) در مکان یک قرار دارد. پس آن را در 16 به توان یک ضرب می‌کنیم (16^1 = 16).

حالا نتایج را با هم جمع می‌کنیم: 1 * 1 + 16 * 1 = 17

بنابراین، عدد هگزادسیمال 0x10 برابر است با عدد ده‌دهی 17.

خلاصه:

  • 0x1 همیشه برابر با عدد ده‌دهی 1 است.
  • 0x10 برابر با عدد ده‌دهی 16 است.

نتیجه‌گیری:

بنابراین، وقتی عبارت Number("0x11") را در جاوا اسکریپت اجرا می‌کنیم، جاوا اسکریپت رشته‌ی "0x11" را به عنوان یک عدد هگزادسیمال تفسیر می‌کند و آن را به عدد ده‌دهی معادل یعنی 17 تبدیل می‌کند.

نکات مهم:

  • اگر رشته‌ی ورودی حاوی کاراکترهای غیرعددی باشد یا پیشوند هگزادسیمال صحیحی نداشته باشد، تابع Number() مقدار NaN (Not a Number) را برمی‌گرداند.
  • برای تبدیل اعداد با پایه‌های دیگر (مانند باینری یا اکتال) نیز می‌توان از تابع parseInt() استفاده کرد و پایه عددی مورد نظر را به عنوان آرگومان دوم به آن پاس داد.

مثال‌ها:

console.log(Number(&quot0b101&quot)); // خروجی: 5 (تبدیل از باینری به ده‌دهی) console.log(parseInt(&quot101&quot, 2)); // خروجی: 5 (تبدیل از باینری به ده‌دهی) console.log(Number(&quot0o13&quot)); // خروجی: 11 (تبدیل از اکتال به ده‌دهی)
جاوا اسکریپت
امیدوارم به بهتر شدن کمک کنم. در تلگرام و اینستاگرام پیام بفرست، SeyedAhmaddv - ارشد نرم افزار، توسعه دهنده ری اکت و نکست
شاید از این پست‌ها خوشتان بیاید