Не нәрсе? · bei.pm
Осы бөлімде файл форматтары мен кері инженерия туралы мақалалар бар.
Бірақ, мәселе мынада:
Сыртта көптеген бағдарламалау тілдері және кейбір нәрселерді мүлде басқа атаулармен білетін көптеген адамдар бар - не болмаса, олардың бағдарламалау тілі оларды түсінуден алыстатқандықтан, ең негізгі нәрселердің бар екенін білмейді.
tl;dr:
Менің нотациям C99 <stdint.h>
стандартына негізделген. Бұл нотациямен таныс адамдар менің нотациямды оңай түсінеді.
Бүтін сан
Бүтін сандар - бұл қарапайым тілмен айтқанда, ондық бөлігі жоқ сандар.
Бүтін сандар деректер форматтарында, әдетте, белгілі бір сандық диапазонда, яғни бір шешімде анықталады. Мен бұл шешімді биттермен көрсетемін - себебі "байт" және оларға негізделген типтер (Word, Qword, ...) әдетте платформаға тәуелді.
Сондай-ақ, бүтін сандар типтері арасында табиғи сандар (ℕ, яғни, таңбасыз - Unsigned) және бүтін сандар (ℤ, яғни, таңбалы - Signed) арасында айырмашылық бар.
Бұл ақпарат таңбалық көрсеткіште (u
немесе s
) көрінеді.
Тағы да, таңбалы бүтін сандар бірлік толықтыру немесе екілік толықтыру ретінде көрсетілуі мүмкін.
Егер басқаша көрсетілмесе, екілік толықтыру қолданылады, себебі бұл қазіргі информатикада таңдалған көрсетілім.
Мен таңбасыз сандарды өз құжаттарымда uint
ретінде көрсетемін, содан кейін дәлдікті биттерде көрсетемін.
Таңбалы сандарды мен өз құжаттарымда sint
ретінде көрсетемін, дәлдікті биттерде көрсетумен бірге.
Мен char
деректер типін символдар үшін қолданбаймын, себебі символдар тізбектері әдетте тек бүтін сандар тізбегімен арнайы интерпретация ретінде көрсетіледі.
Сондықтан олар uint(8)[]
ретінде көрсетіледі.
Мысалдар:
Нотация | C99 stdint.h -эквиваленті |
Сипаттама | Сандық диапазон |
---|---|---|---|
uint(16) | uint16_t | Знаксыз бүтін сан, 16 бит ұзындығы | 0 - 65.535 |
sint(8) | int8_t | Знакпен бүтін сан, 8 бит ұзындығы, екілік комплемент | -126 - 127 |
uint(24) | uint32_t:24 | Знаксыз бүтін сан, 24 бит ұзындығы | 0 - 16.777.216 |
Фесткомма мәндері
Фиксирленген нүкте мәндері - бұл Рационал сандар (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 стандартынан ауытқыған формат қолданылса, бұл тиісінше көрсетіледі.