ما هو ما؟ · bei.pm
في هذا القسم، يوجد مقالات حول تنسيقات الملفات والهندسة العكسية.
لكن الأمر هو كالتالي:
يوجد خارج هناك العديد من لغات البرمجة والعديد من الأشخاص الذين يعرفون بعض الأشياء بأسماء مختلفة تمامًا - أو ليس لديهم أي فكرة عن وجود أبسط الأشياء، لأن لغة برمجتهم تبتعد عن ذلك.
tl;dr:
تستند تدوينتي بشكل عام إلى C99 <stdint.h>
. من يستطيع فهم هذه التدوينة سيتعامل بالتأكيد مع تدوينتي بسهولة.
عدد صحيح
الأعداد الصحيحة هي ببساطة أعداد كاملة، أي أعداد بدون جزء عشري.
تُعرف الأعداد الصحيحة عادةً في تنسيقات البيانات ضمن نطاق ثابت من الأرقام، أو ما يُعرف بدقة معينة. أُعبر عن ذلك بالبتات - وذلك لأن "بايت" وأنواع البيانات المبنية عليه (كالكلمة، وكلمة مزدوجة، ...) عادة ما تكون معتمدة على النظام الأساسي.
أيضًا، يتم التمييز بين أنواع الأعداد الصحيحة بين الأعداد الطبيعية (ℕ، أي بدون إشارة - بدون إشارة) والأعداد الصحيحة (ℤ، أي مع إشارة - مع إشارة).
يمكن رؤية هذه المعلومات من خلال الإشارة في المعرف (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)، وبالتالي فهي تحتوي على فاصلة وأرقام عشرية.
في القيم الثابتة، يتم تحديد موقع الفاصلة بشكل ثابت بواسطة نوع البيانات - ومن هنا جاء الاسم.
وبذلك يتم الحصول على نطاق ثابت للأرقام لهذا النوع من البيانات؛ وبعبارة رياضية، فإن نطاق الأعداد هو منتهي.
في الواقع، يتم استخدام هذا النوع من البيانات بشكل رئيسي في المنصات التي لا تحتوي على وحدة معالجة نقطة عائمة سريعة بما فيه الكفاية، حيث يمكن حساب القيم الثابتة من خلال وحدات الأعداد الصحيحة.
كما يتم استخدام نوع البيانات هذا، على سبيل المثال، من قبل أنظمة إدارة قواعد البيانات عندما يجب تلبية متطلبات محددة.
يمكن التفكير في أنظمة التخزين الدائم للبيانات المالية؛ حيث تقتصر معظم العملات على رقمين عشريين بعد الفاصلة.
(لكن من غير الحكمة استخدام القيم الثابتة لهذا الغرض؛ بل من الأفضل تخزين أقل وحدة نقدية كعدد صحيح وتركيز الباقي على مستوى العرض)
على غرار بيانات الأعداد الصحيحة، أقدم عند التعامل مع القيم الثابتة دقة الرقم قبل وبعد الفاصلة:
ufixed(9,7)
تشير إلى نوع بيانات يحجز 9 بت للقيمة قبل الفاصلة، و7 بت للقيمة بعد الفاصلة؛ وبالتالي، يكون العرض الإجمالي 16 بت، ويمكن أن تغطي كمتجه من عددين صحيحين مستقلين مجالاً من (0,0) إلى (511,127).
ومع ذلك، فإن هذه التفسير ستمنح 28 رقمًا غير مستخدم في تمثيلها العشري، حيث من المحتمل أن يقتصر الأمر عمليًا على (511,99).
بدلاً من التفسير المباشر للقيمة الثابتة كمتجه من عددين صحيحين منفصلين - مما يعني دائمًا وجود مساحة بيانات غير مستخدمة عند التحويل إلى أرقام عشرية ونقل يدوي - يمكن أيضًا تفسير نطاق الأرقام العشرية ككسر من إجمالي دقتها.
على سبيل المثال، في ufixed(9,7)
يتكون كسر على مقام قدره 27 - وبالتالي، يمتد نطاق الأعداد من 0.00 إلى 511 + 126⁄127
لتحويلها إلى تمثيل عشري، يجب تقسيم الرقم العشري على 128.
مع هذه الطريقة، يمكن إجراء العمليات الحسابية بسهولة أكبر، حيث يتم إجراء النقل تلقائيًا، مما يجعل هذه الطريقة مفضلة في معظم الأحيان.
ومع ذلك، فإن هذه الطريقة لها العيب في أن الأرقام العشرية في التمثيل العشري لم تعد تتمتع بدقة مضمونة، وبالتالي فإن الرقم العشري الواحد لم يعد يعادل 0.01
، بل 0.007874
، مما سيؤدي إلى أخطاء تقريبيّة مناسبة.
سيتم توثيق أي طريقة تفسير مستخدمة وفقًا لموقع الاستخدام.
قيم الأعداد العشرية أو الأعداد العائمة
القيم العشرية هي تعبيرات رياضية أكثر تعقيدًا، حيث يتم التعبير عن عدد صحيح بدقة ثابتة من خلال مصطلح رياضي بحيث يتم تشكيل الجزء العشري بشكل فعال من خلال الإزاحة - وبالتالي فهي تستند مباشرة إلى التدوين العلمي.
أكثر الطرق شيوعًا لتنفيذ ذلك تم توحيدها مع
IEEE 754 وهي معترف بها دوليًا منذ ذلك الحين.
عادةً ما تتكون القيمة العشرية من المكونات التالية:
الإشارة (0 أو 1 ) |
الأس | الجزء الكسري |
بينما يمكن استنتاج الإشارة كمعلومة ثنائية نعم/لا بسهولة، يتم تشكيل الرقم الفعلي من خلال المعادلة
الجزء الكسري * 2الأس
بالإضافة إلى ذلك، هناك مجموعة من القيم الثابتة التي تغطي حالات خاصة من الأعداد النسبية - بما في ذلك ±∞
و NaN
("عدد غير صالح").
تكون القيم العشرية مفيدة بشكل خاص عندما لا تكون الدقة مهمة للغاية، حيث تحدث أخطاء تقريبية وفقدان للدقة بشكل حتمي مع هذا النوع من القيم. عادةً ما تُستخدم القيم العشرية، على سبيل المثال، لتعريف الإحداثيات، مثل متجهات الرأس في النماذج ثلاثية الأبعاد أو منحنيات Bézier / Spline لأغراض التمثيل البصري.
في تنسيقات البيانات، يتم تحديد القيم العشرية على أنها float(الجزء الكسري, الأس)
.
إذا تم استخدام تنسيق يختلف عن IEEE 754، فسيتم الإشارة إلى ذلك وفقًا لذلك.