څه دی څه؟ · bei.pm
په دې برخه کې د فایلونو فارمیټونو او ریورس انجنیرینګ په اړه مقالې شته.
خو اوس داسې ده:
بهر کې ډېرې پروگرامینګ ژبې شته او ډېر کسان داسې شیان په بشپړ ډول مختلفو نومونو سره پیژني - یا حتی د بنسټیزو شیانو د شتون په اړه هېڅ پوهه نه لري، ځکه چې د دوی پروگرامینګ ژبه دا له دوی څخه لیرې کړې ده.
tl;dr:
زما نوټیشن په عمومي ډول د C99 <stdint.h>
سره تړاو لري. څوک چې د دې نوټیشن سره آشنا وي، یقیناً به زما نوټیشن سره هم کار وکړي.
عدد
Integer په ساده ډول سره بشپړ شمېرې دي، یعنې شمېرې چې د اعشاری برخه نه لري.
په دې کې Integer د معلوماتو په بڼو کې معمولاً د یوې ثابتې شمېرې د حدودو، په یوه ډول د حل کولو په توګه، تعریف شوي. زه دا په بټ کې څرګندوم - د دې لپاره چې "بایټ" او نور پر دې بنسټ لاسته راوړل شوي ډولونه (ورډ، کیورډ، ...) عموماً د پلېټفارم پورې تړلي دي.
سربېره پردې، د Integer ډولونو ترمنځ هم د طبیعي شمېرو (ℕ، یعنې، بې نښانه - Unsigned) او بشپړ شمېرو (ℤ، یعنې، سره نښانه - Signed) ترمنځ توپیر کیږي.
دا معلومات د نښان له لارې په نښه کې ( u
یا s
) څرګندېږي.
دا ممکنه ده چې نښانه لرونکي بشپړ شمېرې یا د یوه مکمل په توګه څرګند شي یا د دوه مکمل په توګه.
تر هغه چې بل ډول نه وي ښودل شوی، دوه مکمل کارول کیږي، ځکه چې دا په عصري کمپیوټر ساینس کې غوره نمایندګي ده.
زه بې نښانه شمېرې په خپلو مستنداتو کې د uint
په توګه ښودم، د دې سره د دقت بیان په بټونو کې.
نښانه لرونکې شمېرې زه په خپلو مستنداتو کې د sint
په توګه ښودم، همدارنګه د دقت بیان په بټونو کې.
زه د "char" د معلوماتو ډول د نښو لپاره استعمال نه کوم، ځکه چې نښې معمولا یوازې د ځانګړې تفسیر سره Integer ارزښتونه دي.
دا له دې امله د uint(8)[] په توګه څرګندېږي.
نمونې:
نښه | C99 stdint.h -برابر |
تشریح | عددې ساحه |
---|---|---|---|
uint(16) | uint16_t | بې نښه عدد، ۱۶ بټ اوږدوالی | ۰ - ۶۵.۵۳۵ |
sint(8) | int8_t | نښه دار عدد، ۸ بټ اوږدوالی، دوه ګونی تکمیل | -۱۲۶ - ۱۲۷ |
uint(24) | uint32_t:24 | بې نښه عدد، ۲۴ بټ اوږدوالی | ۰ - ۱۶.۷۷۷.۲۱۶ |
د ثابت اعشاریو ارزښتونه
فکسډ پوائنټ ارزښتونه د عددونو ارزښتونه دي چې د منطقي عددونو (Q) د طیف څخه، چې په دې سره د کامې او غیر کامې نقطې مالکیت لري.
د فکسډ پوائنټ ارزښتونو کې، - له همدې امله نوم - د کامې موقعیت د معلوماتو ډول له مخه ټاکل شوی دی.
له دې امله، د دې معلوماتو ډول لپاره د عددونو ثابت ساحه رامنځته کیږي؛ ریاضي کې، د عددونو ځای محدود دی.
په حقیقت کې، دا معلوماتي ډول عموماً په هغو پلاتفورمونو کې کارول کیږي چې د تیز فلوټینګ پوائنټ هارډویر واحد نلري، ځکه چې د فکسډ پوائنټ ارزښتونو حساب کول د انټیجر واحدونو له لارې ترسره کیدی شي.
همداراز، دا معلوماتي ډول د مثال په توګه د معلوماتو اداره کولو سیسټمونو لخوا کارول کیږي، کله چې ثابت اړتیاوې باید پوره شي.
دلته د مالي معلوماتو د دایمي ذخیره کولو سیسټمونو په اړه فکر وکړئ؛ د ډیری اسعارو لپاره د کامې وروسته 2 ځایونه محدود دي.
(خو دا سم نه دی چې د دې لپاره فکسډ پوائنټ ارزښتونه وکارول شي؛ غوره دا ده چې د دې پر ځای د کوچني اسعار واحد په توګه مستقیم انټیجر ذخیره کړو او د نمایندګي پاتې برخه پرېږدو)
د انټیجر ارزښتونو سره د مشابهت له مخې، زه د فکسډ پوائنټ ارزښتونو کې د عدد اندازه مخکې او وروسته د کامې په اړه ښییم:
ufixed(9,7)
د معلوماتو یوه ډول ته اشاره کوي چې 9 بټ د کامې مخکې د ارزښت لپاره، او 7 بټ د کامې وروسته د ارزښت لپاره بې نښې ځانګړي کړي؛ په مجموع کې 16 بټ عرض لري او د بېلګې په توګه د دوه خپلواکه انټیجرونو په توګه (0,0) نه تر (511,127) پورې ساحه پوښلای شي.
خو دا تفسیر به په دې دایمي نمایندګي کې 28 عددونه بې کاره ضایع کړي، ځکه چې په عمل کې به احتمالاً تر (511,99) پورې محدود پاتې شي.
د فکسډ پوائنټ ارزښتونه د 2 جلا انټیجرونو یوه ویکتور په توګه د مستقیم تفسیر پر ځای، د کامې وروسته ساحه د هغې ټولې اندازې په توګه د کسر په توګه هم تفسیر کیدی شي.
د مثال په توګه د یاد شوي ufixed(9,7)
له مخې، د 27 په لوړ کې یوه کسر رامنځته کیږي - د عددونو ساحه له 0,00 نه تر 511 + 126⁄127
د دایمي نمایندګي په بدلون کې، د کیمې نقطه باید په 128 باندې تقسیم شي.
د دې بڼه سره، محاسباتي عملیاتونه اسانه ترسره کیدی شي، ځکه چې د انتقال عمل په اوتومات ډول رامنځته کیږي، چې له همدې امله دا بڼه عموماً ترجیحي کیږي.
خو دا بڼه دا عیب لري چې د دایمي نمایندګي کې د کامې ځایونه نور هم د تضمین شوې اندازې نلري، یعنې یوه انفرادی دایمي ځای نور هم د 0.01
ارزښت نه لري، بلکه 0.007874
لري، چې د اړوند دایمي تیروتنو لامل کیږي.
کومه تفسیر طریقه کارول کیږي، په اړونده ځای کې مستند شوې ده.
د فلوټینګ یا ګلایټینګ نمبرونه
د غلیظ عدد ارزښتونه ریاضي کې پیچلي څرګندونې دي، چیرې چې یوه بشپړه شمیره د ثابت حل څخه د ریاضي د اصطلاح له لارې داسې څرګندېږي چې مؤثره توګه د اعشاریه برخه د انتقال له لارې تشکیل شي - او پدې توګه سملاسي د علمي نوټیشن سره سمون لري.
دا د ترسره کولو تر ټولو عامه لاره د
IEEE 754 په مرسته معیار شوی او له هغه راهیسې نړیواله توګه پیژندل شوې ده.
د دې ترڅنګ، د غلیظ عدد ارزښت په عموم کې له لاندې اجزاو څخه جوړ دی:
نښه (0 یا 1 ) |
ایکسپوننټ | مانتیسه |
په داسې حال کې چې نښه د بائنري هو/نه معلوماتو په توګه آسانه بیان کیدی شي، اصلي شمیره د معادلې له لارې جوړېږي
مانتیسه * 2ایکسپوننټ
اضافي، یو لړ ثابته ارزښتونه هم شتون لري چې ځانګړي حالتونه عقلي شمیرو پوښي - پکې ±∞
او NaN
("هیڅ معتبره شمیره").
د غلیظ عدد ارزښتونه په ځانګړي ډول هغه وخت ګټورې دي کله چې دقت ډیر مهم نه وي، ځکه چې د دې ډول ارزښتونو سره د ګردش تېروتنې او په دې توګه دقت له لاسه ورکول حتمي دي. معمولا د غلیظ عدد ارزښتونه د مثال په توګه د همغږیو د تعریف لپاره کارول کیږي، لکه د 3D ماډلونو کې د ویکټر ویکتورونه یا د بصري استازیتوب موخو لپاره بییر/سپلین کرښې.
په معلوماتي فارمیټونو کې د غلیظ عدد ارزښتونه د float(مانتیسه, ایکسپوننټ)
په توګه مشخص شوي دي.
که چیرې د IEEE 754 نه متفاوت فارمیټ وکارول شي، نو دا به accordingly بیان شي.