موضوع مقاله: فرمت اعداد رایانه‌ای | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # فرمت اعداد رایانه‌ای | مقدمه: فرمت اعداد رایانه ای نحوه قرار گرفتن و مدل شدن اعداد در سخت‌افزار و نرم‌افزار یک دستگاه دیجیتال است (مانند رایانه‌های قابل برنامه‌ریزی و ماشین حساب‌ها). | ## بخش 1: فرمت اعداد رایانه‌ای | مقادیر عددی به صورت گروه‌های بیت‌ها مانند بایت‌ها (۸ بیت) و کلمات ذخیره می‌شوند. رمزگذاری مورد استفاده توسط مجموعه دستورالعمل کامپیوتر معمولاً برای استفاده خارجی مانند چاپ و نمایش نیاز به تبدیل دارد. انواع مختلف پردازنده‌ها ممکن است نمایش‌های داخلی متفاوتی از مقادیر عددی داشته باشند و قراردادهای متفاوتی برای اعداد صحیح و طبیعی استفاده می‌شود. اکثر محاسبات با فرمت‌های اعدادی انجام می‌شوند که در یک رجیستر پردازنده قرار می‌گیرند، اما بعضی از سیستم‌های نرم‌افزاری امکان نمایش اعداد بزرگ دلخواه را با استفاده از چندین کلمه حافظه را ممکن می‌سازند. نمایش اعداد باینری رایانه‌ها داده‌ها را در مجموعه ای از ارقام باینری نشان می‌دهند. این نمایش شامل مجموعه ای از بیت‌ها است که به نوبه خود در مجموعه‌های بزرگتر مانند بایت‌ها (۸ بیت) گروه‌بندی می‌شوند. +جدول ۱: باینری به اکتال رشته باینری مقدار اکتال ۰۰۰ ۰ ۰۰۱ ۱ ۰۱۰ ۲ ۰۱۱ ۳ ۱۰۰ ۴ ۱۰۱ ۵ ۱۱۰ ۶ ۱۱۱ ۷ +جدول ۲: تعداد مقادیر برای یک رشته بیت. طول رشته به طول b بیت تعداد مقادیر ممکن (N) ۱ ۲ ۲ ۴ ۳ ۸ ۴ ۱۶ ۵ ۳۲ ۶ ۶۴ ۷ ۱۲۸ ۸ ۲۵۶ ۹ ۵۱۲ ۱۰ ۱۰۲۴ . مفهوم بیت را می‌توان به عنوان یک ارزش یا ۱ یا ۰ در نظر گرفت، روشن یا خاموش، آری یا نه، درست یا غلط، یا کد گذاری توسط یک سوئیچ یا کلید. یک بیت به تنهایی قادر است تنها دو مقدار را نشان دهد در حالیکه، رشته‌ای از بیت‌ها ممکن است برای نمایش مقادیر بزرگتر استفاده شود. به عنوان مثال، یک رشته از بیت‌ها به طول سه می‌تواند تا هشت (دو به توان سه) مقدار مجزا را همان‌طور که در جدول ۱ نشان داده شده‌است نشان دهد. با افزایش تعداد بیت‌های تشکیل دهنده یک رشته، تعداد ترکیب‌های ممکن ۰ و ۱ به صورت تصاعدی افزایش می‌یابد. یک بیت تنها دو مقدار را می‌تواند نمایش دهد، دو بیت می‌تواند چهار مقدار مجزا را ایجاد کند، سه بیت هشت مقدار مجزا و …. مقدار ترکیبات ممکن با اضافه شدن هر رقم باینری همان‌طور که در جدول ۲ نشان داده شده‌است، دو برابر می‌شود. گروه‌بندی‌هایی با تعداد بیت‌های خاص برای نمایش چیزهای مختلف و دارای نام‌های خاص استفاده می‌شوند. یک بایت یک رشته بیت است که شامل تعداد بیت‌های مورد نیاز برای نمایش یک کاراکتر است. از آنجایی که تعریف بایت به تعداد بیت‌های تشکیل دهنده یک کاراکتر مربوط می‌شود، برخی از کامپیوترهای قدیمی از طول بیت متفاوتی برای بایت خود استفاده کرده‌اند. برای مثال پردازنده‌های ۶۴ بیتی ممکن است در یک زمان شصت و چهار بیت حافظه را آدرس دهی کنند، اما امکان دارد آن حافظه را به قطعات هشت بیتی تقسیم کنند. از آنجایی که اندازه بایت هشت بیت بسیار رایج است، اما تعریف استاندارد نشده‌است، اصطلاح octet گاهی اوقات برای توصیف یک دنباله هشت بیتی استفاده می‌شود. | ## بخش 2: فرمت اعداد رایانه‌ای | نمایش اعداد اکتال و هگزادسیمال رمزگذاری اکتال و هگزادسیمال راه‌های مناسبی برای نمایش اعداد باینری هستند، همان‌طور که توسط رایانه‌ها استفاده می‌شود. مهندسان کامپیوتر اغلب نیاز به نوشتن مقادیر باینری دارند، اما در عمل نوشتن یک عدد باینری مانند ۱۰۰۱۰۰۱۱۰۱۰۱۰۰۰۱ خسته کننده و مستعد خطا است؛ بنابراین، کمیت‌های باینری در قالب اعداد در مبنای هشت، یا "اکتال"، یا به‌طور معمول، پایه ۱۶، "هگزادسیمال" (هگز) نوشته می‌شوند. در سیستم دهدهی، ۱۰ رقم از ۰ تا ۹ وجود دارد که با هم ترکیب می‌شوند و اعداد را تشکیل می‌دهند. در یک سیستم هشتی فقط ۸ رقم از ۰ تا ۷ وجود دارد؛ یعنی مقدار اکتال "۱۰" همان عدد اعشاری "۸" است، یک اکتال "۲۰" یک اعشار "۱۶" و غیره. هنگام تایپ اعداد، از کاراکترهای خاصی برای توصیف سیستم اعداد استفاده می‌شود، به عنوان مثال 000_0000B یا 0b000_۰۰۰۰۰ برای اعداد باینری و 0F8H یا 0xf8 برای اعداد هگزادسیمال. تبدیل بین پایه‌ها +جدول ۳: مقایسه مقادیر در مبانی مختلف اعشاری دودویی هشتی هگزادسیمال ۰ ۰۰۰۰۰۰ ۰۰ ۰۰ ۱ ۰۰۰۰۰۱ ۰۱ ۰۱ ۲ ۰۰۰۰۱۰ ۰۲ ۰۲ ۳ ۰۰۰۰۱۱ ۰۳ ۰۳ ۴ ۰۰۰۱۰۰ ۰۴ ۰۴ ۵ ۰۰۰۱۰۱ ۰۵ ۰۵ ۶ ۰۰۰۱۱۰ ۰۶ ۰۶ ۷ ۰۰۰۱۱۱ ۰۷ ۰۷ ۸ ۰۰۱۰۰۰ ۱۰ ۰۸ ۹ ۰۰۱۰۰۱ ۱۱ ۰۹ ۱۰ ۰۰۱۰۱۰ ۱۲ 0A ۱۱ ۰۰۱۰۱۱ ۱۳ 0B ۱۲ ۰۰۱۱۰۰ ۱۴ 0C ۱۳ ۰۰۱۱۰۱ ۱۵ 0D ۱۴ ۰۰۱۱۱۰ ۱۶ 0E ۱۵ ۰۰۱۱۱۱ ۱۷ 0F هر یک از این سیستم‌های اعداد یک سیستم موقعیتی هستند، اما در حالی که اوزان اعشاری توان‌های ۱۰ هستند، اوزان هشتی توان‌های ۸ و وزن‌های هگزا دسیمال توان‌های ۱۶ هستند. به‌طور مثال: نمایش کسرها به صورت دودویی اعداد نقطه ثابت قالب بندی نقطه ثابت می‌تواند برای نمایش کسری اعداد به صورت دودویی مفید باشد. تعداد بیت‌های مورد نیاز برای دقت و محدوده مورد نظر باید برای ذخیره قسمت‌های کسری و صحیح یک عدد انتخاب شود. به عنوان مثال، با استفاده از فرمت ۳۲ بیتی، ۱۶ بیت برای عدد صحیح و ۱۶ بیت برای کسری ممکن است استفاده شود. به‌طور مثال: بیت‌های اعشاریبیت‌های صحیح۰٫۵۰۰==۰۰۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰٫۱۰۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰۱٫۲۵۰==۰۰۰۰۰۰۰۰ ۰۰۰۰۰۰۰۱٫۰۱۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰۷٫۳۷۵==۰۰۰۰۰۰۰۰ ۰۰۰۰۰۱۱۱٫۰۱۱۰۰۰۰۰ ۰۰۰۰۰۰۰۰ این شکل از رمزگذاری نمی‌تواند برخی از مقادیر را به صورت باینری نشان دهد. به عنوان مثال، کسری 0.2 در اعشاری، نزدیک‌ترین تقریب می‌شود شرح زیر است: ۱۳۱۰۷ / ۶۵۵۳۶ = ۰۰۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰٫۰۰۱۱۰۰۱۱ ۰۰۱۱۰۰۱۱ = ۰٫۱۹۹۹۹۶۹... به صورت اعشاری ۱۳۱۰۸ / ۶۵۵۳۶ = ۰۰۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰٫۰۰۱۱۰۰۱۱ ۰۰۱۱۰۱۰۰ = ۰٫۲۰۰۰۱۲۲... اعداد اعشاری در حالی که هر دو اعداد صحیح بدون علامت و علامت در سیستم‌های دیجیتال استفاده می‌شوند، حتی یک عدد صحیح ۳۲ بیتی برای مدیریت طیف وسیعی از اعدادی که یک ماشین حساب می‌تواند انجام دهد، کافی نیست، و این فقط شامل کسر نمی‌شود. برای تقریب محدوده و دقت بیشتر اعداد حقیقی، باید اعداد صحیح علامت دار و اعداد نقطه ثابت را کنار بگذاریم و به قالب " ممیز شناور " برویم. در سیستم اعشاری، ما با اعداد ممیز شناور شکل (نماد علمی) آشنا هستیم: 1.1030402 × 10 5 = 1.1030402 × ۱۰۰۰۰۰ = ۱۱۰۳۰۴٫۰۲ یا به‌طور خلاصه تر: 1.1030402E5 که به معنی "۱٫۱۰۳۰۴۰۲ ضربدر ۱ به دنبال ۵ صفر است". ما یک مقدار عددی معین (۱٫۱۰۳۰۴۰۲) داریم که به عنوان " ضریب " شناخته می‌شود، ضرب در توان 10 (E5، به معنای 10 5 یا ۱۰۰۰۰۰)، که به عنوان " توان " شناخته می‌شود. اگر ما یک توان منفی داشته باشیم، به این معنی است که عدد در ۱ چند مکان در سمت راست نقطه اعشار ضرب می‌شود. مثلا: 2.3434E − ۶ = 2.3434 × 10 -6 = 2.3434 × ۰٫۰۰۰۰۰۱ = ۰٫۰۰۰۰۰۲۳۴۳۴ مزیت این طرح این است که با استفاده از توان می‌توانیم دامنه بسیار وسیع‌تری از اعداد را بدست آوریم، حتی اگر تعداد ارقام در معنادار یا «دقت عددی» بسیار کوچک‌تر از محدوده باشد. تعدادی از این طرح‌ها وجود دارد که محبوب‌ترین آنها توسط موسسه مهندسین برق و الکترونیک (IEEE) تعریف شده‌است. | ## بخش 3: فرمت اعداد رایانه‌ای | مشخصات استاندارد IEEE 754-2008 فرمت ممیز شناور ۶۴ بیتی را با موارد زیر تعریف می‌کند: یک توان باینری ۱۱ بیتی، با استفاده از فرمت "excess-1023". Excess-1023 به این معنی است که توان به صورت یک عدد صحیح باینری بدون علامت از ۰ تا ۲۰۴۷ ظاهر می‌شود. با تفریق ۱۰۲۳ مقدار علامت دار واقعی به دست می‌آید یک معنادار ۵۲ بیتی، همچنین یک عدد باینری بدون علامت، که یک مقدار کسری را با یک پیشرو ضمنی "۱" تعریف می‌کند. بیایید با دیدن اینکه یک عدد چگونه در ۸ بایت حافظه ذخیره می‌شود متوجه شویم این فرمت چگونه است. متداول‌ترین طرح از یک معنادار ۲۳ بیتی با یک بیت علامت، به اضافه یک توان ۸ بیتی در قالب "excess-127" استفاده می‌کند که هفت رقم اعشاری معتبر را ارائه می‌دهد. هشت بایت ذخیره شده در حافظه کامپیوتر ممکن است نشان دهنده یک real64 بیتی، دو عدد real32 بیتی، یا چهار عدد صحیح علامت دار یا بدون علامت، یا نوع دیگری از داده‌ها باشد که در هشت بایت قرار می‌گیرند. اگر رایانه چهار عدد صحیح بدون علامت را ذخیره می‌کرد و سپس آنها را از حافظه به عنوان واقعی ۶۴ بیتی می‌خواند، تقریباً همیشه یک عدد واقعی کاملاً معتبر خواهد بود، اگرچه داده‌های ناخواسته است. عملیات حسابی می‌تواند سرریز یا زیر سرریز شود و مقداری را تولید کند که به دلیل اینکه خیلی بزرگ یا خیلی کوچک هست. عدد کوچک آنقدر کوچک بود که حتی با وضوح ۱۵ یا ۱۶ رقمی نشان داده نمی‌شد و کامپیوتر عملاً آن را کنار می‌گذارد. برآورد بزرگی خطاهای دور کردن و روش‌هایی برای محدود کردن تأثیر آنها بر محاسبات بزرگ، بخشی از هر پروژه محاسباتی بزرگ است. در بسیاری از موارد مجموع توانهای متقابل ۲ با کسر اعشاری خاصی مطابقت ندارد و نتایج محاسبات کمی کاهش می‌یابد. به عنوان مثال، کسر اعشاری "۰٫۱" معادل یک کسر باینری بی‌نهایت تکراری است: 0.000110011. اعداد در زبان‌های برنامه‌نویسی برنامه‌نویسی به زبان اسمبلی به برنامه‌نویس نیاز دارد که نمایش اعداد را پیگیری کند. در مواردی که پردازنده از عملیات ریاضی مورد نیاز پشتیبانی نمی‌کند، برنامه‌نویس باید یک الگوریتم و دنباله دستورالعمل مناسب را برای اجرای عملیات ایجاد کند. عملیات ریاضی توسط روال‌های کتابخانه ای که توسط پیاده‌سازی زبان ارائه می‌شود انجام می‌شود. یک نماد ریاضی داده شده در کد منبع، با بارگذاری بیش از حد اپراتور، کد شی متفاوتی را که برای نمایش نوع عددی مناسب است فراخوانی می‌کند. عملیات ریاضی روی هر عددی - اعم از علامت دار، بدون علامت، گویا، ممیز شناور، نقطه ثابت، انتگرال یا مختلط - دقیقاً به همین ترتیب نوشته می‌شود. | ## جمع‌بندی | برخی از زبان‌ها، مانند REXX و جاوا، عملیات ممیز شناور اعشاری را ارائه می‌کنند که خطاهای گرد کردن به شکل متفاوتی را ارائه می‌کنند.