العدد الصحيح في علوم الحاسوب (كما يُسمى في الإنجليزية (بالإنجليزية: integer)) هو مرجع لنوع متكامل من البيانات، ويمثل بيانات ضمن مجال الأعداد الصحيحة رياضياً. تختلف إمكانية القسم السالبة باختلاف لغة البرمجة المعتمدة وكذلك حجم المجال. عادةً ما تمثل الأعداد الصحيحة في الحاسب بمجموعة من الأرقام الثنائية، ويعتمد أيضاً الحجم على نوع المعالج. توفر الحواسيب دومًا طريقة لتمثيل سجل المعالج أو عنوان الذاكرة بهيئة عدد صحيح. اعتمد في المقالة على التسميات الأجنبية لاعتمادها عالمياً وتقنياً في مجال الحاسب مع ترجمتها عند ورودها المرة الأولى.
قيمة عنصر بنوع متكامل هي العدد الصحيح الرياضي الذي يتوافق معه. قد تكون الأنواع المتكاملة بدون إشارة (قادرة على تمثيل الأعداد الصحيحة غير السالبة فقط) أو مع إشارة لتمثيل الأعداد الموجبة والسالبة معاً.[1] تحدد بنية العدد الصحيح في الشيفرة المصدرية لبرنامج ما على شكل سلسلة من الأرقام مسبوقة اختياريًا بـالإشارة الموجبة أو السالبة. تسمح بعض لغات البرمجة بإضافة الأعداد بأنظمة عد مكافئة للعشرية مثل نظام العد الست عشري (ذو الأساس 16) أو الثماني (الأساس 8). تسمح بعض لغات البرمجة أيضًا بفواصل عشرية للأرقام.[2] طريقة التمثيل الداخلي للبيانات هي الطريقة التي تحفظ بها الأعداد الصحيحة في ذاكرة الحاسب، تنحصر الأعداد الصحيحة حاسوبياً في مجال من الأعداد الصحيحة رياضياً، أي خلافاً للأعداد الصحيحة رياضياً، هناك حدود دنيا وعليا لقيم الأعداد الصحيحة. الطريقة الأكثر شيوعاً لتمثيل العدد الصحيح الموجب هو سلسلة من البتات باستخدام نظام العد الثنائي، وتختلف خوارزمية ترتيب هذه البتاتي في الذاكرة وفقاً ترتيب البايتات، حيث عرض أو نوع العدد الصحيح يحدد عدد البتات التي يمثلها. العدد الصحيح الذي يخة ي عدد س من البايتات يشفر بقيمة ثنائية 2س. على سبيل المثال الأعداد الصحيحة غير المؤشرة (أي التي تضم الأعداد الصحيحة غير السالبة فقط) تقع ضمن المجال من 0 حتى 2س-1. تُستخدم أحيانًا ترميزات أخرى لقيم الأعداد الصحيحة لأنماط البت، على سبيل المثال نظام عشري مشفر ثنائياً أو شفرة منعكسة أو بشكل رموز أحرف مطبوعة مثل أسكي.
هناك أربع طرق معروفة لتمثيل الأرقام مع إشارة في نظام الحوسبة الثنائية. الأكثر شيوعًا هو المتمم الثنائي، والذي يسمح بالمجال المتمم للعدد من القيمة س بت لتمثيل الأرقام من −2 (س-1) حتّى 2 (س-1) −1. الحساب متمم ثنائي مريحة لأن هناك تقابل مثالي بين التمثيل والقيم (وخاصة بسبب عدم الفصل بين القيمة الموجبة والسالبة للصفر)، ولأن إضافة، الطرح والضرب لا تحتاج إلى التمييز بين أنواع المؤشرة أو غير المؤشرة. الطرق الأخرى تشمل الإزاحة الثنائية عبر الضارب التسلسلي، ووزن الإشارة لتمثيل العدد المؤشر والمتمم الأحادي.
تحدد بعض لغات البرمجة مجال الأعداد الصحيحة بعيداً عن نوع الجهاز المعالج للبيانات؛ البعض الآخر له تعريفات مختلفة اعتمادًا على حجم كلمة المعالج الأساسي. لا تحدد جميع تطبيقات اللغة متغيرات من جميع أحجام الأعداد الصحيحة، وقد لا تكون الأحجام المحددة مميزة حتى في تنفيذ معين. قد يكون عدد صحيح في لغة برمجة واحدة حجمًا مختلفًا بلغة مختلفة أو على معالج مختلف.
البتات | الاسم | المجال (باعتبار المؤشر بطريقة المتمم الثنائي) | القيمة العشرية | يستخدم في | التطبيقات | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
سي (لغة برمجة)/سي++ | سي شارب | باسكال (لغة برمجة) ودلفي (لغة برمجة) | جافا (لغة برمجة) | إس كيو إل[ا] | فورتران | دي (لغة برمجة) | |||||
4 | نايبل، نصف ثماني (SemiOctet) | مع إشارة: من −8 حتى 7، أي من −(23) حتى 23 − 1 | 0.9 | نظام عشري مشفر ثنائيا، أحادي، التمثيل العشري الرقمي | — | — | — | — | — | — | — |
بدون إشارة: من 0 حتى 15، المكافئ لـ 24 − 1 | 1.2 | ||||||||||
8 | بايت، ثمانية (حوسبة), i8, u8 | المؤشر: من −128 حتى 127، أي من −(27) حتّى27 − 1 | 2.11 | محارف الأسكي، ترميز المحارففي صيغة التحويل الموحد-8 | int8_t, signed char[ب] | sbyte | Shortint | byte | tinyint | integer(1) | byte |
غير المؤشر: من 0 حتى 255, المكافئ لـ 28 − 1 | 2.41 | uint8_t, unsigned char[ب] | byte | Byte | — | unsigned tinyint | — | ubyte | |||
16 | نصف كلمة (HalfWord)، كلمة (بنية الحاسوب) (Word)، قصير (Short)، i16 u16 | مع إشارة: من −32,768 حتى 32,767, من −(215) حتى 215 − 1 | 4.52 | مجموعة المحارف العالمية الإصدار 2 (UCS)، ترميز المحارف في يو تي اف-16 ترميز المحارف | int16_t, short,[ب] int[ب] | short | Smallint | short | smallint | integer(2) | short |
غير المؤشر: من 0 حتى 65,535, المكافئ لـ 216 − 1 | 4.82 | uint16_t, unsigned,[ب] unsigned int[ب] | ushort | Word | char[ج] | unsigned smallint | — | ushort | |||
32 | كلمة (Word)، طويل (Long)، كلمة مضاعفة (Double Word)، كلمة طويلة (Long Word)، عدد صحيح (int) i32, u32 | مع إشارة: من −2,147,483,648 حتى 2,147,483,647، أي من −(231) حتى 231 − 1 | 9.33 | محارف يو تي اف-32، عمق لوني مع ألفا، ترميز رباعي المحارف، المؤشرات في معمارية 32 بت | int32_t, int,[ب] long[ب] | int | LongInt; Integer[د] | int | int | integer(4) | int |
غير المؤشر: من 0 حتى 4,294,967,295, المكافئ لـ 232 − 1 | 9.63 | uint32_t, unsigned,[ب] unsigned int,[ب] unsigned long[ب] | uint | LongWord; DWord; Cardinal[د] | — | unsigned int | — | uint | |||
64 | كلمة، كلمة مضاعفة (Double Word)، طويل طويل (Long long)، رباعي (quad)، كلمة رباعية (QuadWord)، كلمة من النوع qword
الصنف int64، وi64, u64 |
مع إشارة: من −9,223,372,036,854,775,808 حتى قوة العدد اثنين، أي من −(263) حتى 263 − 1 | 18.96 | التوقيت (ميللي ثانية في توقيت يونكس)، المؤشرات فيمعمارية 64 بت | int64_t, long,[ب] long long[ب] | long | Int64 | long | bigint | integer(8) | long |
غير المؤشر: من 0 حتى 18,446,744,073,709,551,615, المكافئ لـ 264 − 1 | 19.27 | uint64_t, unsigned long long[ب] | ulong | UInt64; QWord | — | unsigned bigint | — | ulong | |||
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 − 1 | 38.23 | حسابات علمية معقدة، عناوينبروتوكول الإنترنت (الإصدار السادس)، معرّف فريد عالميًا (GUIDs) | C: متاح فقط كملحق غير قياسي خاص بالمترجم | — | — | — | — | integer(16) | cent[ه] |
غير المؤشر: من 0 حتى 340,282,366,920,938,463,463,374,607,431,768,211,455, المكافئ لـ 2128 − 1 | 38.53 | — | ucent[ه] | ||||||||
n | عدد صحيح بعدد n (الحالة العامَّة) |
مع إشارة: −(2n−1) حتى (2n−1 − 1) | (n − 1) log10 2 | أيدا (لغة برمجة): range -2**(n-1)..2**(n-1)-1 | |||||||
غير المؤشر: 0 حتى (2n − 1) | n log10 2 | Ada: 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 | غير مؤشر | 2 | 0 | 65.535 | |
سي# | short | مؤشر | 2 | -32768 | +32767 |
ushort | غير مؤشر | 2 | 0 | 65.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 |
فيجوال بيسك | معيار الشركة | ويندوز | Long | 4 [15] | −2,147,483,648 إلى +2,147,483,647 |
فيجوال بيسك للتطبيقات | معيار الشركة | نظام التشغيل ويندوز وMac OS X | Long | 4 [16] | −2,147,483,648 إلى +2,147,483,647 |
خادم قاعدة البيانات | معيار الشركة | ويندوز | BigInt | 8 | −9,223,372,036,854,775,808 إلى +9,223,372,036,854,775,807 |
سي شارب / فيجوال بيسك دوت نت | معيار ECMA الدولي | مايكروسوفت دوت نت وفيجوال بيسك دوت نت | long أوInt64 | 8 | −9,223,372,036,854,775,808 إلى +9,223,372,036,854,775,807 |
جافا | المعيار الدولي/ الشركة | منصة جافا | long | 8 | −9,223,372,036,854,775,808 إلى +9,223,372,036,854,775,807 |
باسكال | ؟ | ويندوز، يونيكس | int64 | 8 | −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.