რა არის რა? · bei.pm
ამ განყოფილებაში მოცემულია სტატიები ფაილის ფორმატებზე და რევერსულ ინჟინერიაზე.
ახლა ასეა:
გარეში არსებობს მრავალი პროგრამირების ენა და ბევრი ადამიანი იცნობს გარკვეულ საგნებს სრულიად განსხვავებული სახელით - ან საერთოდ არ აქვთ წარმოდგენა ელემენტარული საგნების არსებობაზე, რადგან მათი პროგრამირების ენა მათგან ეს ყველაფერი აბსტრაქტულად წარმოგიდგენს.
tl;dr:
ჩემის ნოტაცია დაახლოებით C99 <stdint.h>
-ზეა დაფუძნებული. ვინც ამ ნოტაციით გარკვეულწილად იცნობს, ჩემი ნოტაციით აუცილებლად კარგად მოექცევა.
მთელი რიცხვი
Integer არის მარტივად გაწვდილი მთელი რიცხვები, ანუ რიცხვები უკანა ნიშნის გარეშე.
ამასთან, Integer-ები მონაცემთა ფორმატებში ჩვეულებრივ განსაზღვრულია განსაზღვრული რიცხვების სპექტრში, ფაქტიურად რეზოლუციაში. ამას მე ვაძლევ ბიტებში - რადგან "ბაიტი" და მასზე დამყარებული ტიპები (Word, Qword, ...) ჩვეულებრივ პლატფორმისთვის დამოკიდებულია.
ამასთან, Integer ტიპების შემთხვევაში ასევე არსებობს განსხვავება ბუნებრივ რიცხვებს (ℕ, ანუ, უსწორმასწორო - Unsigned) და მთელი რიცხვების (ℤ, ანუ, სწორმასწორო - Signed).
ეს ინფორმაცია შეიძლება გამოჩნდეს ნიშნით სახელში (u
ან s
).
ამას გარდა, შესაძლებელია სწორმასწორო მთელი რიცხვები წარმოდგენილი იყოს როგორც ერთის დამატებითი ან როგორც ორების დამატებითი.
თუ სხვაგვარად არ არის მითითებული, გამოყენებულია ორების დამატებითი, რადგან ეს თანამედროვე კომპიუტერული მეცნიერების მიერ უპირატესი ფორმა არის.
უსწორმასწორო რიცხვები ჩემს დოკუმენტებში წარმოდგენილია როგორც uint
, შემდეგ კი სიზუსტის მითითებით ბიტებში.
მართვის რიცხვები ჩემს დოკუმენტებში წარმოდგენილია როგორც sint
, ასევე სიზუსტის მითითებით ბიტებში.
მე არ გამოვიყენებ "char" ტიპის მონაცემებს სიმბოლებისთვის, რადგან სიმბოლოების სტრიქონები ჩვეულებრივ მხოლოდ Integer მნიშვნელობების სტრიქონებია სპეციალური ინტერპრეტაციით.
ამიტომ ისინი წარმოდგენილია როგორც 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), რაც იმას ნიშნავს, რომ მათ აქვთ წერტილი და მეათედი.
ფიქსირებული წერტილების მნიშვნელობების შემთხვევაში - ასე რომ, მათი სახელი - წერტილის პოზიცია განსაზღვრულია მონაცემთა ტიპით.
ამიტომაც არსებობს კონკრეტული რიცხვითი დიაპაზონი ამ მონაცემთა ტიპისთვის; მათემატიკურად გამოთქმული, რიცხვითი სივრცე არის ბოლო.
จริงๆ, ეს მონაცემთა ტიპი უმეტესად გამოიყენება პლატფორმებზე, რომელთა ფლოტაციური კომპიუტერული აპარატურა არ არის საკმარისად სწრაფი, რადგან ფიქსირებული წერტილების მნიშვნელობების გამოთვლა შეიძლება INTEGER ერთეულების მიერ.
ასევე, ეს მონაცემთა ტიპი გამოიყენება, მაგალითად, მონაცემთა ბაზების მართვის სისტემებში, როდესაც საჭირო ხდება მყარი მოთხოვნების შესრულება.
აქ უნდა გავიხსენოთ ფინანსური მონაცემების მუდმივი შენახვის სისტემები; უმეტესობა ვალუტების 2 მეათედი ადგილზეა.
(მაგრამ არ არის ჭკვიანი ამისთვის ფიქსირებული წერტილების მნიშვნელობები აიღოს; უფრო ჭკვიანურად იქნება პირდაპირ ყველაზე პატარა ვალუტის ერთეული INTEGER-ად შენახვა და დანარჩენი პრეზენტაციის დონეზე დატოვება)
INTEGER მონაცემების მსგავსად, ფიქსირებული წერტილების მნიშვნელობებზე ვაძლევ რიცხვის წინ და შემდეგ წერტილს:
ufixed(9,7)
მიუთითებს მონაცემთა ტიპზე, რომელიც უსინათლო 9 ბიტს ინარჩუნებს წერტილის წინ, და 7 ბიტს წერტილის შემდეგ; სულ 16 ბიტის სიგანე აქვს და ასე მაგალითად, როგორც ორი დამოუკიდებელი INTEGER-ის ვექტორი, შეგიძლიათ მოიცვას დიაპაზონი (0,0) -დან (511,127)-მდე.
თუმცა, ეს ინტერპრეტაცია თავის დეკიმალურ წარმოდგენაში 28 რიცხვს დაუკარგავს, რადგან ალბათ უფრო მეტად მოიცავს მაქსიმუმ (511,99) პრაქტიკაში.
ფიქსირებული წერტილის მნიშვნელობის მباشე ინტერპრეტაციის ნაცვლად, როგორც 2 ცალკეული INTEGER-ის ვექტორი - რაც თითქმის ყოველთვის ნიშნავს დაუნიშნავ რიცხვულ ფართობს დეკიმალურ რიცხვებში და ხელით გადატანას - შეგიძლიათ ასევე გამოთვალოთ მეათედი როგორც წილი მათი სრული გადაწყვეტის.
ufixed(9,7)
-ის მაგალითზე, შესაბამისად, მიიღება წილი 27-ზე; რიცხვითი დიაპაზონი იმ შემთხვევაში იქნება 0,00 -დან 511 + 126⁄127
დეკიმალურ წარმოდგენაში გადატანისთვის, მეათედი უნდა გაყოფილი იყოს 128.
ამ ვარიანტით უფრო მარტივად შეგიძლიათ გააკეთოთ გამოთვლითი ოპერაციები, რადგან გადატანა ავტომატურად ხდება, რის შედეგადაც ეს ვარიანტი ჩვეულებრივ შერჩეული იქნება.
ამ ვარიანტს აქვს ნაკლი, რომ მეათედი დეკიმალურ წარმოდგენაში აღარ აქვს გარანტირებული გადაწყვეტა, ერთი დეკიმალური ადგილი აღარ წარმოადგენს 0.01
, არამედ 0.007874
, რაც შესაბამისი რაუნდინგის შეცდომებს გამოიწვევს.
რომელი ინტერპრეტაციის მეთოდი გამოიყენება, შესაბამისი გამოყენების ადგილას დოკუმენტდება.
სცურავი ან მიტაცების მნიშვნელობები
შედარებითი მნიშვნელობები წარმოადგენს მათემატიკურად უფრო კომპლექსურ გამოთქმებს, სადაც цел чисел фиксированной разрешения через математический термин так выражается, что эффективно дробная часть формируется через смещение - და იმით პირდაპირ დაკავშირებულია მეცნიერების ნოტაციის მიმართ.
ეს განხორციელების ყველაზე გავრცელებული გზა სტანდარტიზებულია IEEE 754-ით და მას შემდეგ საერთაშორისო დონეზე აღიარებულია.
ამასობაში, შედარებითი მნიშვნელობა ჩვეულებრივ შედგება შემდეგი კომპონენტებისგან:
ნიშანი (0 ან 1 ) |
ექსპონენტი | მანტისას |
როდესაც ნიშანი როგორც ბინარული დიახ/არა ინფორმაცია მარტივად გადაეცემა, რეალური რიცხვი ფორმირდება თანასწორობით
მანტისას * 2ექსპონენტი
გარდა ამისა, არსებობს რიგი კონსტანტური მნიშვნელობების, რომლებიც განსაკუთრებულ შემთხვევებს რაციიონალური რიცხვების მოიცავს - მათ შორის ±∞
და NaN
("არ არის ვალიდური რიცხვი").
შედარებითი მნიშვნელობები განსაკუთრებით ფუნქციურია, როდესაც მართლაც ზუსტი არ არის მნიშვნელოვანი, რადგან ამ ტიპის მნიშვნელობების მიმართ აუცილებლად წარმოიქმნება რაუნდინგის შეცდომები და შესაბამისად ზუსტობის დაკარგვა. ჩვეულებრივ, შედარებითი მნიშვნელობები მაგალითად გამოიყენება კოორდინატების განსაზღვრაში, როგორიცაა ვერტექს-ვექტორები 3D მოდელებში ან ბეზიე/სპლაინ-კრივები ოპტიკური წარმოდგენის მიზნით.
მონაცემთა ფორმატებში შედარებითი მნიშვნელობები როგორც float(მანტისას, ექსპონენტი)
კონკრეტულია.
თუ გამოიყენება IEEE 754-ისგან განსხვავებული ფორმატი, ეს შესაბამისად იქნება აღნიშნული.