فرمت اعداد کامپیوتری
فرمت اعداد رایانه ای نحوه قرار گرفتن و مدل شدن اعداد در سخت افزار و نرم افزار یک دستگاه دیجیتال است (مانند رایانه های قابل برنامه ریزی و ماشین حساب ها) . مقادیر عددی به صورت گروه های بیت ها مانند بایت ها (۸ بیت) و کلمات ذخیره می شوند. رمزگذاری بین مقادیر عددی و الگوهای بیت برای راحتی کار رایانه انتخاب شده است.[نیازمند منبع] رمزگذاری مورد استفاده توسط مجموعه دستورالعمل کامپیوتر معمولاً برای استفاده خارجی مانند چاپ و نمایش نیاز به تبدیل دارد. انواع مختلف پردازنده ها ممکن است نمایش های داخلی متفاوتی از مقادیر عددی داشته باشند و قراردادهای متفاوتی برای اعداد صحیح و طبیعی استفاده می شود. اکثر محاسبات با فرمتهای اعدادی انجام میشوند که در یک رجیستر پردازنده قرار میگیرند، اما بعضی از سیستمهای نرمافزاری امکان نمایش اعداد بزرگ دلخواه را با استفاده از چندین کلمه حافظه را ممکن میسازند.
نمایش اعداد باینری[ویرایش]
رایانه ها داده ها را در مجموعه ای از ارقام باینری نشان می دهند. این نمایش شامل مجموعه ای از بیت ها است که به نوبه خود در مجموعه های بزرگتر مانند بایت ها (8 بیت) گروه بندی می شوند.
رشته باینری | مقدار اکتال |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
طول رشته به طول b بیت | تعداد مقادیر ممکن (N) |
---|---|
1 | 2 |
2 | 4 |
3 | 8 |
4 | 16 |
5 | 32 |
6 | 64 |
7 | 128 |
8 | 256 |
9 | 512 |
10 | 1024 |
. . . | |
بیت یک رقم باینری است که یکی از دو حالت را نشان می دهد . مفهوم بیت را می توان به عنوان یک ارزش و یا 1 یا 0 در نظر گرفت، روشن یا خاموش، آری یا نه، درست یا غلط، و یا کد گذاری توسط یک سوئیچ یا کلید.
یک بیت به تنهایی قادر است تنها دو مقدار را نشان دهد در حالیکه، رشته ای از بیت ها ممکن است برای نمایش مقادیر بزرگتر استفاده شود. به عنوان مثال، یک رشته از بیت ها به طول سه می تواند تا هشت (دو به توان سه) مقدار مجزا را همانطور که در جدول 1 نشان داده شده است نشان دهد.
با افزایش تعداد بیت های تشکیل دهنده یک رشته، تعداد ترکیب های ممکن 0 و 1 به صورت تصاعدی افزایش می یابد. یک بیت تنها دو مقدار را میتواند نمایش دهد، دو بیت می تواند چهار مقدار مجزا را ایجاد کند، سه بیت هشت مقدار مجزا و ... . که با فرمول 2^n افزایش می یابد. مقدار ترکیبات ممکن با اضافه شدن هر رقم باینری همانطور که در جدول 2 نشان داده شده است، دو برابر می شود.
گروهبندیهایی با تعداد بیتهای خاص برای نمایش چیزهای مختلف و دارای نامهای خاص استفاده میشوند.
یک بایت یک رشته بیت است که شامل تعداد بیت های مورد نیاز برای نمایش یک کاراکتر است. در بیشتر کامپیوترهای مدرن، این یک رشته شامل هشت بیت است. از آنجایی که تعریف بایت به تعداد بیت های تشکیل دهنده یک کاراکتر مربوط می شود، برخی از کامپیوترهای قدیمی از طول بیت متفاوتی برای بایت خود استفاده کرده اند. [۱] در بسیاری از معماریهای کامپیوتری ، بایت کوچکترین واحد آدرسپذیر است. برای مثال پردازنده های 64 بیتی ممکن است در یک زمان شصت و چهار بیت حافظه را آدرس دهی کنند، اما امکان دارد آن حافظه را به قطعات هشت بیتی تقسیم کنند. این حافظه آدرس پذیر بایت نامیده می شود. از لحاظ تاریخی، بسیاری از CPU ها داده ها را در مضربی از هشت بیت می خوانند. [۲] از آنجایی که اندازه بایت هشت بیت بسیار رایج است، اما تعریف استاندارد نشده است، اصطلاح octet گاهی اوقات برای توصیف یک دنباله هشت بیتی استفاده می شود.
یک نیبل (گاهی اوقات nybble )، یک عدد است که که از چهار بیت تشکیل شده است. [۳] به عنوان یک نیم بایت ، نیبل به عنوان بازی با کلمات نامگذاری می شود.
نمایش اعداد اکتال و هگزادسیمال[ویرایش]
رمزگذاری اکتال و هگزادسیمال راه های مناسبی برای نمایش اعداد باینری هستند، همانطور که توسط رایانه ها استفاده می شود. مهندسان کامپیوتر اغلب نیاز به نوشتن مقادیر باینری دارند، اما در عمل نوشتن یک عدد باینری مانند 1001001101010001 خسته کننده و مستعد خطا است. بنابراین، کمیت های باینری در قالب اعداد در مبنای هشت، یا "اکتال"، یا به طور معمول، پایه 16، "هگزادسیمال" ( هگز ) نوشته می شوند. در سیستم دهدهی، 10 رقم از 0 تا 9 وجود دارد که با هم ترکیب می شوند و اعداد را تشکیل می دهند. در یک سیستم هشتی فقط 8 رقم از 0 تا 7 وجود دارد. یعنی مقدار اکتال "10" همان عدد اعشاری "8" است، یک اکتال "20" یک اعشار "16" و غیره. در یک سیستم هگزادسیمال، 16 رقم وجود دارد، 0 تا 9، و طبق توافق 6 رقم از A تا F. یعنی یک هگزادسیمال "10" همان رقم اعشاری "16" و یک هگزادسیمال "20" یکسان است. مثال و مقایسه اعداد در پایه های مختلف در نمودار زیر توضیح داده شده است.
هنگام تایپ اعداد، از کاراکترهای خاصی برای توصیف سیستم اعداد استفاده می شود، به عنوان مثال 000_0000B یا 0b000_00000 برای اعداد باینری و 0F8H یا 0xf8 برای اعداد هگزادسیمال.
تبدیل بین پایه ها[ویرایش]
اعشاری | دودویی | هشتی | هگزادسیمال |
---|---|---|---|
0 | 000000 | 00 | 00 |
1 | 000001 | 01 | 01 |
2 | 000010 | 02 | 02 |
3 | 000011 | 03 | 03 |
4 | 000100 | 04 | 04 |
5 | 000101 | 05 | 05 |
6 | 000110 | 06 | 06 |
7 | 000111 | 07 | 07 |
8 | 001000 | 10 | 08 |
9 | 001001 | 11 | 09 |
10 | 001010 | 12 | 0A |
11 | 001011 | 13 | 0B |
12 | 001100 | 14 | 0C |
13 | 001101 | 15 | 0D |
14 | 001110 | 16 | 0E |
15 | 001111 | 17 | 0F |
هر یک از این سیستم های اعداد یک سیستم موقعیتی هستند، اما در حالی که اوزان اعشاری توان های 10 هستند، اوزان هشتی توان های 8 و وزن های هگزا دسیمال توان های 16 هستند. مقدار رقم را با مقدار موقعیت آن و سپس نتایج را اضافه می کند. به طور مثال:
نمایش کسرها به صورت دودویی[ویرایش]
اعداد نقطه ثابت[ویرایش]
قالب بندی نقطه ثابت می تواند برای نمایش کسری اعداد به صورت دودویی مفید باشد.
تعداد بیت های مورد نیاز برای دقت و محدوده مورد نظر باید برای ذخیره قسمت های کسری و صحیح یک عدد انتخاب شود. به عنوان مثال، با استفاده از فرمت 32 بیتی، 16 بیت برای عدد صحیح و 16 بیت برای کسری ممکن است استفاده شود.
بیت هشتم به دنبال آن بیت چهارم، سپس بیت دوم و سپس بیت یکم می آید. بیت های کسری الگوی تعیین شده توسط بیت های عدد صحیح را ادامه می دهند. بیت بعدی بیت نیمه، سپس بیت چهارم، سپس بیت ⅛ و غیره است. به طور مثال:
بیت های اعشاری | بیت های صحیح | ||||
---|---|---|---|---|---|
0.500 | = | 12 | = | 00000000 00000000.10000000 00000000 | |
1.250 | = | 114 | = | 00000000 00000001.01000000 00000000 | |
7.375 | = | 738 | = | 00000000 00000111.01100000 00000000 |
این شکل از رمزگذاری نمی تواند برخی از مقادیر را به صورت باینری نشان دهد. به عنوان مثال، کسری15 0.2 در اعشاری، نزدیک ترین تقریب می شود شرح زیر است:
13107 / 65536 | = | 00000000 00000000.00110011 00110011 | = | 0.1999969... به صورت اعشاری |
13108 / 65536 | = | 00000000 00000000.00110011 00110100 | = | 0.2000122... به صورت اعشاری |
حتی اگر ارقام بیشتری استفاده شود، نمایش دقیق غیرممکن است. شماره13 که به صورت اعشاری به صورت 0.333333333... نوشته می شود، به طور نامحدود ادامه می یابد.
اعداد اعشاری[ویرایش]
در حالی که هر دو اعداد صحیح بدون علامت و علامت در سیستم های دیجیتال استفاده می شوند، حتی یک عدد صحیح 32 بیتی برای مدیریت طیف وسیعی از اعدادی که یک ماشین حساب می تواند انجام دهد، کافی نیست، و این فقط شامل کسر نمی شود. برای تقریب محدوده و دقت بیشتر اعداد حقیقی ، باید اعداد صحیح علامت دار و اعداد نقطه ثابت را کنار بگذاریم و به قالب " ممیز شناور " برویم.
در سیستم اعشاری، ما با اعداد ممیز شناور شکل ( نماد علمی ) آشنا هستیم:
- 1.1030402 × 10 5 = 1.1030402 × 100000 = 110304.02
یا به طور خلاصه تر:
- 1.1030402E5
که به معنی "1.1030402 ضربدر 1 به دنبال 5 صفر است". ما یک مقدار عددی معین (1.1030402) داریم که به عنوان " ضریب " شناخته می شود، ضرب در توان 10 (E5، به معنای 10 5 یا 100000)، که به عنوان " توان " شناخته می شود. اگر ما یک توان منفی داشته باشیم، به این معنی است که عدد در 1 چند مکان در سمت راست نقطه اعشار ضرب می شود. مثلا:
- 2.3434E − 6 = 2.3434 × 10 -6 = 2.3434 × 0.000001 = 0.0000023434
مزیت این طرح این است که با استفاده از توان میتوانیم دامنه بسیار وسیعتری از اعداد را بدست آوریم، حتی اگر تعداد ارقام در معنادار یا «دقت عددی» بسیار کوچکتر از محدوده باشد. فرمت های باینری ممیز شناور مشابهی را می توان برای رایانه ها تعریف کرد. تعدادی از این طرح ها وجود دارد که محبوب ترین آنها توسط موسسه مهندسین برق و الکترونیک (IEEE) تعریف شده است. مشخصات استاندارد IEEE 754-2008 فرمت ممیز شناور 64 بیتی را با موارد زیر تعریف می کند:
- یک توان باینری 11 بیتی، با استفاده از فرمت "excess-1023". Excess-1023 به این معنی است که توان به صورت یک عدد صحیح باینری بدون علامت از 0 تا 2047 ظاهر می شود. با تفریق 1023 مقدار علامت دار واقعی به دست می آید
- یک معنادار 52 بیتی، همچنین یک عدد باینری بدون علامت، که یک مقدار کسری را با یک پیشرو ضمنی "1" تعریف می کند.
- یک بیت علامت، با دادن علامت عدد.
بیایید با دیدن اینکه یک عدد چگونه در 8 بایت حافظه ذخیره میشود متوجه شویم این فرمت چگونه است.
بایت 0 | s | x10 | x9 | x8 | x7 | x6 | x5 | x4 |
---|---|---|---|---|---|---|---|---|
بایت 1 | x3 | x2 | x1 | x0 | m51 | متر 50 | m49 | m48 |
بایت 2 | m47 | m46 | m45 | m44 | m43 | m42 | m41 | m40 |
بایت 3 | m39 | m38 | m37 | m36 | m35 | m34 | m33 | m32 |
بایت 4 | m31 | m 30 | m29 | m28 | m27 | m26 | m 25 | m24 |
بایت 5 | m23 | m22 | m21 | m 20 | m19 | m18 | m17 | m16 |
بایت 6 | m15 | m14 | m13 | m12 | m11 | m10 | m9 | m8 |
بایت 7 | m7 | m6 | m5 | m4 | m3 | m2 | m1 | m0 |
که در آن "S" نشان دهنده بیت علامت، "x" نشان دهنده یک بیت توان و "m" نشان دهنده یک بیت معنادار است. هنگامی که بیت های اینجا استخراج شدند، با محاسبه زیر تبدیل می شوند:
- <sign> × (1 + <fractional significand>) × 2<exponent> − 1023
این طرح اعداد معتبر تا حدود 15 رقم اعشاری را با دامنه اعداد زیر ارائه می دهد:
بیشترین | کمترین | |
---|---|---|
مثبت | 1.797693134862231E+308 | 4.940656458412465E-324 |
منفی | -4.940656458412465E-324 | -1.797693134862231E+308 |
این مشخصات همچنین چندین مقدار خاص را تعریف میکند که اعداد تعریفشده نیستند و به عنوان NaNs شناخته میشوند، مخفف شده ی "ٔNot A Number". اینها توسط برنامه ها برای تعیین عملیات نامعتبر و موارد مشابه استفاده می شود.
برخی از برنامه ها از اعداد ممیز شناور 32 بیتی نیز استفاده می کنند. متداول ترین طرح از یک معنادار 23 بیتی با یک بیت علامت، به اضافه یک توان 8 بیتی در قالب "excess-127" استفاده می کند که هفت رقم اعشاری معتبر را ارائه می دهد.
بایت 0 | s | x7 | x6 | x5 | x4 | x3 | x2 | x1 |
---|---|---|---|---|---|---|---|---|
بایت 1 | x0 | m22 | m21 | m 20 | m19 | m18 | m17 | m16 |
بایت 2 | m15 | m14 | m13 | m12 | m11 | m10 | m9 | m8 |
بایت 3 | m7 | m6 | m5 | m4 | m3 | m2 | m1 | m0 |
بیت ها با محاسبه زیر به یک مقدار عددی تبدیل می شوند:
- sign> × (1 + <fractional significand>) × 2<exponent> − 127>
منجر به محدوده اعداد زیر می شود:
بیشترین | کمترین | |
---|---|---|
مثبت | 3.402823E+38 | 2.802597E-45 |
منفی | -2.802597E-45 | -3.402823E+38 |
چنین اعداد ممیز شناور به طور کلی به عنوان "واقعی" یا "شناور" شناخته می شوند، اما با تعدادی تغییرات:
مقدار شناور 32 بیتی گاهی اوقات "real32" یا "single" نامیده می شود که به معنای "مقدار ممیز شناور با دقت یکتا" است.
یک شناور 64 بیتی گاهی اوقات "real64" یا "double" نامیده می شود که به معنای "مقدار ممیز شناور با دقت دوگانه" است.
رابطه بین اعداد و الگوهای بیت برای راحتی در کار های رایانه انتخاب شده است. هشت بایت ذخیره شده در حافظه کامپیوتر ممکن است نشان دهنده یک real64 بیتی، دو عدد real32 بیتی، یا چهار عدد صحیح علامت دار یا بدون علامت، یا نوع دیگری از داده ها باشد که در هشت بایت قرار می گیرند. تنها تفاوت این است که چگونه کامپیوتر آنها را تفسیر می کند. اگر رایانه چهار عدد صحیح بدون علامت را ذخیره می کرد و سپس آنها را از حافظه به عنوان واقعی 64 بیتی می خواند، تقریباً همیشه یک عدد واقعی کاملاً معتبر خواهد بود، اگرچه داده های ناخواسته است.
فقط یک بازه محدود از اعداد خقیقی را می توان با تعداد مشخصی از بیت ها نشان داد. عملیات حسابی می تواند سرریز یا زیر سرریز شود و مقداری را تولید کند که به دلیل اینکه خیلی بزرگ یا خیلی کوچک هست . قابل نمایش نیست.
نمایش دقت محدودی دارد. به عنوان مثال، تنها 15 رقم اعشاری را می توان با واقعی 64 بیتی نشان داد. اگر یک عدد ممیز شناور بسیار کوچک به عدد بزرگ اضافه شود، نتیجه فقط عدد بزرگ است. عدد کوچک آنقدر کوچک بود که حتی با وضوح 15 یا 16 رقمی نشان داده نمی شد و کامپیوتر عملاً آن را کنار می گذارد. تجزیه و تحلیل اثر دقت محدود یک مسئله به خوبی مطالعه شده است. برآورد بزرگی خطاهای دور کردن و روشهایی برای محدود کردن تأثیر آنها بر محاسبات بزرگ، بخشی از هر پروژه محاسباتی بزرگ است. حد دقت با حد دامنه متفاوت است، زیرا بر ضریب علمی تأثیر میگذارد، نه توان.
ضریب علمی یک کسر باینری است که لزوماً با کسر اعشاری مطابقت ندارد. در بسیاری از موارد مجموع توانهای متقابل 2 با کسر اعشاری خاصی مطابقت ندارد و نتایج محاسبات کمی کاهش می یابد. به عنوان مثال، کسر اعشاری "0.1" معادل یک کسر باینری بی نهایت تکراری است: 0.000110011. . . [۴]
اعداد در زبان های برنامه نویسی[ویرایش]
برنامه نویسی به زبان اسمبلی به برنامه نویس نیاز دارد که نمایش اعداد را پیگیری کند. در مواردی که پردازنده از عملیات ریاضی مورد نیاز پشتیبانی نمی کند، برنامه نویس باید یک الگوریتم و دنباله دستورالعمل مناسب را برای اجرای عملیات ایجاد کند. در برخی از ریزپردازنده ها، حتی ضرب اعداد صحیح باید در نرم افزار انجام شود.
زبانهای برنامهنویسی سطح بالا مانند Ruby و Python یک عدد انتزاعی را ارائه میدهند که ممکن است یک نوع توسعهیافته مانند rational ، bignum یا complex باشد. عملیات ریاضی توسط روال های کتابخانه ای که توسط پیاده سازی زبان ارائه می شود انجام می شود. یک نماد ریاضی داده شده در کد منبع، با بارگذاری بیش از حد اپراتور ، کد شی متفاوتی را که برای نمایش نوع عددی مناسب است فراخوانی می کند. عملیات ریاضی روی هر عددی - اعم از علامت دار، بدون علامت، گویا، ممیز شناور، نقطه ثابت، انتگرال یا مختلط - دقیقاً به همین ترتیب نوشته می شود.
برخی از زبانها، مانند REXX و جاوا ، عملیات ممیز شناور اعشاری را ارائه میکنند که خطاهای گرد کردن به شکل متفاوتی را ارائه میکنند.
همچنین ببینید[ویرایش]
- محاسبات با دقت دلخواه
- اعشاری با کد دودویی
- سیستم اعداد باینری
- کد خاکستری
- سیستم اعداد
یادداشت ها و مراجع[ویرایش]
The initial version of this article was based on a public domain article from Greg Goebel's Vectorsite.
This article "فرمت اعداد کامپیوتری" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:فرمت اعداد کامپیوتری. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
- ↑ "byte definition". Retrieved 24 April 2012.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Microprocessor and CPU (Central Processing Unit)". Network Dictionary. Archived from the original on 3 October 2017. Retrieved 1 May 2012.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "nybble definition". Retrieved 3 May 2012.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ Goebel, Greg. "Computer Numbering Format". Retrieved 10 September 2012.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.