عدد صحيح (علوم حاسوب)

مدخل لنوع بيانات

العدد الصحيح في علوم الحاسوب (كما يُسمى في الإنجليزية (بالإنجليزية: integer)‏) هو مرجع لنوع متكامل من البيانات، ويمثل بيانات ضمن مجال الأعداد الصحيحة رياضياً. تختلف إمكانية القسم السالبة باختلاف لغة البرمجة المعتمدة وكذلك حجم المجال. عادةً ما تمثل الأعداد الصحيحة في الحاسب بمجموعة من الأرقام الثنائية، ويعتمد أيضاً الحجم على نوع المعالج. توفر الحواسيب دومًا طريقة لتمثيل سجل المعالج أو عنوان الذاكرة بهيئة عدد صحيح.اعتمد في المقالة على التسميات الأجنبية لاعتمادها عالمياً وتقنياً في مجال الحاسب مع ترجمتها عند ورودها المرة الأولى.

القيمة والتمثيل

قيمة عنصر بنوع متكامل هي العدد الصحيح الرياضي الذي يتوافق معه. قد تكون الأنواع المتكاملة بدون إشارة (قادرة على تمثيل الأعداد الصحيحة غير السالبة فقط) أو مع إشارة لتمثيل الأعداد الموجبة والسالبة معاً.[1] تحدد بنية العدد الصحيح في الشيفرة المصدرية لبرنامج ما على شكل سلسلة من الأرقام مسبوقة اختياريًا بـالإشارة الموجبة أو السالبة. تسمح بعض لغات البرمجة بإضافة الأعداد بأنظمة عد مكافئة للعشرية مثل نظام العد الست عشري (ذو الأساس 16) أو الثماني (الأساس 8). تسمح بعض لغات البرمجة أيضًا بفواصل عشرية للأرقام.[2] طريقة التمثيل الداخلي للبيانات هي الطريقة التي تحفظ بها الأعداد الصحيحة في ذاكرة الحاسب، تنحصر الأعداد الصحيحة حاسوبياً في مجال من الأعداد الصحيحة رياضياً، أي خلافاً للأعداد الصحيحة رياضياً، هناك حدود دنيا وعليا لقيم الأعداد الصحيحة. الطريقة الأكثر شيوعاً لتمثيل العدد الصحيح الموجب هو سلسلة من البتات باستخدام نظام العد الثنائي، وتختلف خوارزمية ترتيب هذه البتاتي في الذاكرة وفقاً ترتيب البايتات، حيث عرض أو نوع العدد الصحيح يحدد عدد البتات التي يمثلها. العدد الصحيح الذي يخة ي عدد س من البايتات يشفر بقيمة ثنائية 2س. على سبيل المثال الأعداد الصحيحة غير المؤشرة (أي التي تضم الأعداد الصحيحة غير السالبة فقط) تقع ضمن المجال من 0 حتى 2س-1. تُستخدم أحيانًا ترميزات أخرى لقيم الأعداد الصحيحة لأنماط البت، على سبيل المثال نظام عشري مشفر ثنائياً أو شفرة منعكسة أو بشكل رموز أحرف مطبوعة مثل أسكي.

هناك أربع طرق معروفة لتمثيل الأرقام مع إشارة في نظام الحوسبة الثنائية. الأكثر شيوعًا هو المتمم الثنائي، والذي يسمح بالمجال المتمم للعدد من القيمة س بت لتمثيل الأرقام من −2 (س-1) حتّى 2 (س-1) −1. الحساب متمم ثنائي مريحة لأن هناك تقابل مثالي بين التمثيل والقيم (وخاصة بسبب عدم الفصل بين القيمة الموجبة والسالبة للصفر)، ولأن إضافة، الطرح والضرب لا تحتاج إلى التمييز بين أنواع المؤشرة أو غير المؤشرة. الطرق الأخرى تشمل الإزاحة الثنائية عبر الضارب التسلسلي، ووزن الإشارة لتمثيل العدد المؤشر والمتمم الأحادي.

تحدد بعض لغات البرمجة مجال الأعداد الصحيحة بعيداً عن نوع الجهاز المعالج للبيانات؛ البعض الآخر له تعريفات مختلفة اعتمادًا على حجم كلمة المعالج الأساسي. لا تحدد جميع تطبيقات اللغة متغيرات من جميع أحجام الأعداد الصحيحة، وقد لا تكون الأحجام المحددة مميزة حتى في تنفيذ معين. قد يكون عدد صحيح في لغة برمجة واحدة حجمًا مختلفًا بلغة مختلفة أو على معالج مختلف.

أنواع الأعداد الصحيحة الشائعة في علوم الحاسوب

البتاتالاسمالمجال (باعتبار المؤشر بطريقة المتمم الثنائي)القيمة العشريةيستخدم فيالتطبيقات
سي (لغة برمجة)/سي++سي شاربباسكال (لغة برمجة) ودلفي (لغة برمجة)جافا (لغة برمجة)إس كيو إل[أ]فورتراندي (لغة برمجة)
4نايبل، نصف ثماني (SemiOctet)مع إشارة: من −8 حتى 7، أي من −(23) حتى 23 − 10.9نظام عشري مشفر ثنائيا، أحادي، التمثيل العشري الرقمي
بدون إشارة: من 0 حتى 15، المكافئ لـ 24 − 11.2
8بايت، ثمانية (حوسبة), i8, u8المؤشر: من −128 حتى 127، أي من −(27) حتّى27 − 12.11محارف الأسكي، ترميز المحارففي صيغة التحويل الموحد-8int8_t, signed char[ب]sbyteShortintbytetinyintinteger(1)byte
غير المؤشر: من 0 حتى 255, المكافئ لـ 28 − 12.41uint8_t, unsigned char[ب]byteByteunsigned tinyintubyte
16نصف كلمة (HalfWord)، كلمة (بنية الحاسوب) (Word)، قصير (Short)، i16 u16مع إشارة: من −32,768 حتى 32,767, من −(215) حتى 215 − 14.52مجموعة المحارف العالمية الإصدار 2 (UCSترميز المحارف في يو تي اف-16 ترميز المحارفint16_t, short,[ب] int[ب]shortSmallintshortsmallintinteger(2)short
غير المؤشر: من 0 حتى 65,535, المكافئ لـ 216 − 14.82uint16_t, unsigned,[ب] unsigned int[ب]ushortWordchar[ج]unsigned smallintushort
32كلمة (Word)، طويل (Long)، كلمة مضاعفة (Double Word)، كلمة طويلة (Long Word)، عدد صحيح (int) i32, u32مع إشارة: من −2,147,483,648 حتى 2,147,483,647، أي من −(231) حتى 231 − 19.33محارف يو تي اف-32، عمق لوني مع ألفا، ترميز رباعي المحارف، المؤشرات في معمارية 32 بتint32_t, int,[ب] long[ب]intLongInt; Integer[د]intintinteger(4)int
غير المؤشر: من 0 حتى 4,294,967,295, المكافئ لـ 232 − 19.63uint32_t, unsigned,[ب] unsigned int,[ب] unsigned long[ب]uintLongWord; DWord; Cardinal[د]unsigned intuint
64كلمة، كلمة مضاعفة (Double Word)، طويل طويل (Long long)، رباعي (quad)، كلمة رباعية (QuadWord)، كلمة من النوع qword

الصنف int64، وi64, u64

مع إشارة: من −9,223,372,036,854,775,808 حتى قوة العدد اثنين، أي من −(263) حتى 263 − 118.96التوقيت (ميللي ثانية في توقيت يونكس)، المؤشرات فيمعمارية 64 بتint64_t, long,[ب] long long[ب]longInt64longbigintinteger(8)long
غير المؤشر: من 0 حتى 18,446,744,073,709,551,615, المكافئ لـ 264 − 119.27uint64_t, unsigned long long[ب]ulongUInt64; QWordunsigned bigintulong
128كلمة ثمانية (octaword)، وكلمة رباعية مضاعفة (double quadword) والأنواع i128, u128مع إشارة: من −170,141,183,460,469,231,731,687,303,715,884,105,728 حتى 170,141,183,460,469,231,731,687,303,715,884,105,727, من −(2127) حتى 2127 − 138.23حسابات علمية معقدة، عناوينبروتوكول الإنترنت (الإصدار السادس)، معرّف فريد عالميًا (GUIDs)C: متاح فقط كملحق غير قياسي خاص بالمترجمinteger(16)cent[ه]
غير المؤشر: من 0 حتى 340,282,366,920,938,463,463,374,607,431,768,211,455, المكافئ لـ 2128 − 138.53ucent[ه]
nعدد صحيح بعدد n
(الحالة العامَّة)
مع إشارة: −(2n−1) حتى (2n−1 − 1)(n − 1) log10 2أيدا (لغة برمجة): range -2**(n-1)..2**(n-1)-1
غير المؤشر: 0 حتى (2n − 1)n log10 2Ada: range 0..2**n-1, mod 2**n; المكتبات القياسية أو الفئات العشرية الكبيرة أوالعشرية للمكتبات الحسابية الرياضية التابعة لجهات خارجية في العديد من اللغات مثل Python و C ++ ، إلخ.

تدعم وحدات المعالجة المركزية المختلفة أنواعًا مختلفة من البيانات الصحيحة. عادةً، يدعم العتاد الصلب البيانات بنوعيها المؤشر وبدون إشارات، لكن ضمن مجال محدد صغير وثابت القيم. يسرد الجدول أعلاه عروض الأنواع الأرقام الصحيحة التي تدعمها المعالجات الشائعة في الأجهزة. توفر لغات البرمجة عالية المستوى المزيد من الاحتمالات. من الشائع أن يكون لديك نوع أرقام صحيح «مزدوج العرض» يحتوي على ضعف عدد البتات مثل أكبر الأنواع المدعومة من الأجهزة. تحتوي العديد من اللغات أيضًا على أنواع حقل بت (عدد محدد من البتات، يقيَّد عادةً ليكون أقل من الحد الأقصى للعرض المدعوم من الأجهزة) وأنواع النطاق (التي يمكن أن تمثل فقط الأعداد الصحيحة في نطاق محدد).

تدعم بعض اللغات، مثل ليسب وسمول توك وري أكس أكس وهاسكل وبايثون وراكو، الأعداد الصحيحة العشوائية الدقيقة (المعروفة أيضًا باسم الأعداد الصحيحة اللانهائية أو حساب تدريج الدقة الحر). قد تحتوي اللغات الأخرى التي لا تدعم هذا المفهوم كإنشاء مستوى أعلى مكتبات متاحة لتمثيل أعداد كبيرة جدًا باستخدام مصفوفات من المتغيرات الأصغر، مثل الجافا التي تحوي BigInteger أو لغة بيرل التي تملك فئة "bigint ".[5] هذه تستخدم أكبر قدر من ذاكرة الحاسب كما هو ضروري لتخزين الأرقام؛ ومع ذلك، فإن المعالج يحتوي فقط على كمية محدودة من التخزين، لذلك يمكنهم أيضًا تمثيل مجموعة فرعية محدودة من الأعداد الصحيحة الرياضية. تدعم هذه المخططات أرقامًا كبيرة جدًا، على سبيل المثال، يمكن استخدام كيلوبايت واحد من الذاكرة لتخزين أرقام تصل إلى 2466 رقمًا عشريًا.

نوع البيانات المنطقية أو حقل الأعلام هو نوع يمكن أن يمثل قيمتين فقط: 0 و 1، عادةً ما يتم تحديدهما بـصح أو خطأ على الترتيب. يمكن تخزين هذا النوع في الذاكرة باستخدام بت واحد، ولكن غالبًا ما يتم إعطاؤه بايت كامل لسهولة المعالجة وسرعة الوصول. تُعرف الكمية المكونة من أربعة بتات باسم نايبل الذي يقابل رقمًا واحدًا في نظام سداسي عشري ويحمل رقمًا واحدًا أو رمز علامة في النظام العشري الثنائي.

بايت والثمانية

أطلق مصطلح «بايت» بادئ الأمر على أصغر وحدة عنونة في الذاكرة، وكان هناك بايتات بقيمة عنونة 5 و 6 و 7 و8 و9بتات. بالإضافة لوحود معالجات تعنون وحدات البت المنفردة («أجهزة عنونة بالبت»)، أو قد تعنون العناوين بنظام 16 أو 32 بت («أجهزة عنونة بالكلمة»). كما لم يستخدم مصطلح البت إطلاقاً في آلات العنونة البت والكلمة.

فيما مصطلح ثمانية يشير إلى قيمة 8 بتات، ويستخدم غالباً في نطاق الشبكات الحاسوبية، التي قد تضطر أجهزة الحواسيب بعروض بايت متنوعة التواصل فيما بينها. أصبح مصطلح بايت يساوي ثماني بتات تقريباً، وفقاً للاستخدام المعاصر لها، وبسبب كون جميع الأحجام لم تعد صالحة وأصبح البايت مرادفاً للثمانية.

الكلمة

يستخدم مصطلح «كلمة» لمجموعة صغيرة من وحدات البت التي يتم التعامل معها في وقت واحد بواسطة معالجات من بنية معينة. وبالتالي فإن حجم الكلمة خاص بوحدة المعالجة المركزية. تم استخدام العديد من أحجام الكلمات المختلفة، بما في ذلك 6 و 8 و 12 و 16 و 18 و 24 و 32 و 36 و 39 و 40 و 48 و 60 و 64 بت. نظرًا لأنه بنيوياً، تُحدد حجم الكلمة عادةً بواسطة وحدة المعالجة المركزية الأولى في العائلة، بدلاً من خصائص وحدة المعالجة المركزية المتوافقة لاحقًا. معاني المصطلحات المشتقة من الكلمة، مثل كلمة طويلة longword وكلمة مضاعفة doubleleword وكلمة رباعية quadword ونصف كلمة halfword ، تختلف أيضًا باختلاف وحدة المعالجة المركزية ونظام التشغيل.

عمليا جميع معالجات سطح المكتب الجديدة قادرة على استخدام كلمات 64 بت، على الرغم من أن الأنظمة المضمنة ذات حجم الكلمات 8 و 16 بت لا تزال شائعة. بعدما كان طول الكلمة 36 بت شائعًا في الأيام الأولى لأجهزة الكمبيوتر.

أحد الأسباب المهمة لعدم إمكانية نقل البرنامج هو الافتراض غير الصحيح بأن جميع أجهزة الكمبيوتر لها نفس حجم الكلمات مثل الكمبيوتر الذي يستخدمه المبرمج. على سبيل المثال، إذا أعلن مبرمج يستخدم لغة C بشكل غير صحيح أنهint متغير التي سيتم استخدامها لتخزين القيم أكبر من 2 15 -1، ستفشل البرنامج على أجهزة الكمبيوتر مع الأعداد الصحيحة 16-بت. كان يجب التصريح عن هذا المتغير كـlong ، والذي يحتوي على 32 بت على الأقل على أي جهاز كمبيوتر. قد يفترض المبرمجون أيضًا بشكل غير صحيح أنه يمكن تحويل المؤشر إلى عدد صحيح دون فقد المعلومات، والذي قد يعمل على (بعض) أجهزة الكمبيوتر 32 بت، ولكنه يفشل على أجهزة الكمبيوتر 64 بت ذات مؤشرات 64 بت وأعداد صحيحة 32 بت. تم حل هذه المشكلة عن طريق C99 في stdint.h في شكل intptr_t .

عدد صحيح قصير

يمثل العدد الصحيح القصير الرقم كاملاً الذي يمكن أن يحجز مساحةً أصغر في الذاكرة، وبجال أصغر مقارنة مع العدد الصحيح الذي يحجزه المعالج.في لغة سي عندما يُعرّف المتحول بكونه قصيراً. عندئذ يحجز في الذاكرة ما يساوي 16 بتاً على الأقل، وأحياناً أقل من مساحة المتحول الصحيح القياسي، لكن ذلك غير ملزم.[6][7] يمكن أن يفترض البرنامج المطابق أنه يمكنه تخزين القيم بأمان بين - (2 15 −1) [8] و 2 15 −1، [9] ولكنه قد لا يفترض أن النطاق ليس أكبر. في جافا، إن المصطلح قصير (short) هو دائمًا عدد صحيح 16 بت. في واجهة برمجة تطبيقات ويندوز، نوع البيانات SHORT على أنها عدد صحيح مؤشر بقيمة 16 بت على جميع الأجهزة.

أحجام الأعداد الصحيحة القصيرة الشائعة
لغة برمجةاسم نوع البياناتالإشاراتالحجم بالبايتالحد الأدنى للقيمةالقيمة القصوى
سي وسي++ shortمؤشر2−32767  +32767
 unsigned shortغير مؤشر2065.535
سي# shortمؤشر2-32768+32767
 ushortغير مؤشر2065.535
جافا shortمؤشر2-32768+32767

عدد صحيح طويل

عدد صحيح طويل يمكن أن يمثل كله صحيحا التي نطاق أكبر من أو مساوية لعدد صحيح القياسية على نفس الجهاز. في لغة سي، يُشار إلى الأعداد الصحيحة من النوع الطويل بـ long. والتي يَفترض أنها تساوي 32 بت على الأقل، عندها تكون أكبر من حجم العدد الصحيح القياسي، لكنها تخالف ذلك بعض الأحيان، إلّا أنَّ البرنامج الموافق يمكنه تخزين القيم بأمان بين - (2 31 −1) [10] و 2 31 −1، [11] ولكنه قد لا يفترض أن النطاق ليس أكبر من ذلك.

أنواع الأعداد الصحيحة الطويلة الشائعة
لغة البرمجةنوع الموافقةالمنصاتاسم نوع البياناتالتخزين بالبايتنطاق العدد الصحيح
سي ISO / ANSI C99.0المعيار الدولييونكس، أنظمة 16/32

ويندوز، أنظمة 16/32/64 بت

long [و]4

(الحد الأدنى من المتطلبات 4)

−2,147,483,647 إلى +2,147,483,647
سي ISO / ANSI C99.0المعيار الدولييونكس أنظمة 64 بتlong [lower-alpha 7]8
(الحد الأدنى من المتطلبات 4)
−9,223,372,036,854,775,807 إلى +9,223,372,036,854,775,807
س++ ISO / ANSIالمعيار الدولييونكس، ويندوز،

نظام 16/32 بت

long [lower-alpha 7]4 [13]
(الحد الأدنى من المتطلبات 4)
−2,147,483,648 إلى +2,147,483,647

</br>

C ++ / CLIالمعيار الدولي
ECMA-372
يونكس، ويندوز،
أنظمة 16/32 بت
long [lower-alpha 7]4 [14]
(الحد الأدنى من المتطلبات 4)
−2,147,483,648 إلى +2,147,483,647
فيجوال بيسكمعيار الشركةويندوزLong4 [15]−2,147,483,648 إلى +2,147,483,647
فيجوال بيسك للتطبيقاتمعيار الشركةنظام التشغيل ويندوز وMac OS XLong4 [16]−2,147,483,648 إلى +2,147,483,647
خادم قاعدة البياناتمعيار الشركةويندوزBigInt8−9,223,372,036,854,775,808 إلى +9,223,372,036,854,775,807
سي شارب / فيجوال بيسك دوت نتمعيار ECMA الدوليمايكروسوفت دوت نت وفيجوال بيسك دوت نتlong أوInt648−9,223,372,036,854,775,808 إلى +9,223,372,036,854,775,807
جافاالمعيار الدولي/ الشركةمنصة جافاlong8−9,223,372,036,854,775,808 إلى +9,223,372,036,854,775,807
باسكال؟ويندوز، يونيكسint648−9,223,372,036,854,775,808 إلى +9,223,372,036,854,775,807

عدد صحيح طويل طويل

يحتوي المدخل طويل طويل (long long) في الإصدار سي99 من لغة البرمجة سي والإصدار سي++ 11 بكلمة محجوزة بالشكلlong long ، وتكون قيمة هذا الحقل في لغة سي++ مساويةً لضعف الحد الأدنى من السعة القياسية للمدخل long. هذا النوع غير مدعوم من قبل المترجمات التي تتطلب كود سي ليكون متوافقًا مع معيار سي++ السابق، وهو غير موجود في مترجمات سيي++ 03 لعدم توافقع مع معايير ANSI / ISO للمترجم ومتطلبات الحد الأدنى لنطاقات محددة ضمنها، والتي تكافئ في الأعداد المؤشرة المجال بين −(263−1)[8] حتى 263−1 ومن 0 حتّى 2 64 -1 ل لغير المؤشرة منها [17] لا بد منه تتحقق؛ ومع ذلك، يُسمح بتوسيع هذا النطاق.[18][19] يمكن أن يكون هذا مشكلة عند تبادل التعليمات البرمجية والبيانات بين الأنظمة الأساسية، أو القيام بوصول مباشر إلى الأجهزة. وبالتالي، هناك عدة مجموعات من الرؤوس توفر أنواع عرض دقيقة مستقلة للمنصة. توفر مكتبة C القياسية stdint.h ؛ تم تقديم هذا في C99 و C ++ 11.

ملاحظات

انظر أيضاً

المراجع