JavaRush /مدونة جافا /Random-AR /الأنواع البدائية في Java: إنها ليست بدائية إلى هذا الحد
Viacheslav
مستوى

الأنواع البدائية في Java: إنها ليست بدائية إلى هذا الحد

نشرت في المجموعة

مقدمة

يمكن اعتبار تطوير التطبيقات بمثابة العمل مع بعض البيانات، أو بالأحرى تخزينها ومعالجتها. اليوم أود أن أتطرق إلى الجانب الرئيسي الأول. كيف يتم تخزين البيانات في جافا؟ لدينا هنا تنسيقان محتملان: أنواع البيانات المرجعية والبدائية . دعونا نتحدث عن أنواع الأنواع البدائية وإمكانيات العمل معهم (بغض النظر عما قد يقوله المرء، فهذا هو أساس معرفتنا بلغة البرمجة). أنواع بيانات Java البدائية هي الأساس الذي يرتكز عليه كل شيء. لا، أنا لا أبالغ على الإطلاق. لدى Oracle برنامج تعليمي منفصل مخصص للأوليات: أنواع البيانات البدائية القليل من التاريخ. في البداية كان هناك صفر. لكن الصفر ممل. وبعد ذلك ظهر الشيء . لماذا سمي بذلك؟ تم تسميته بهذا الاسم من الاختصار " bi nary digi t " (الرقم الثنائي). أي أن لها معنيين فقط. وبما أنه كان صفراً، فمن المنطقي أن يكون الآن إما 0 أو 1. وأصبحت الحياة أكثر متعة. بدأت القطع تتجمع في قطعان. وبدأت تسمى هذه القطعان بايت (بايت). في العالم الحديث، البايت = 2 أس ثلاثة، أي. 8. ولكن تبين أن هذا لم يكن الحال دائما. هناك العديد من التخمينات والأساطير والشائعات حول مصدر اسم بايت. يعتقد بعض الناس أن الأمر كله يتعلق بالترميزات في ذلك الوقت، بينما يعتقد البعض الآخر أنه كان أكثر ربحية قراءة المعلومات بهذه الطريقة. البايت هو أصغر جزء من الذاكرة قابل للعنونة. إنها البايتات التي لها عناوين فريدة في الذاكرة. هناك أسطورة مفادها أن ByTe هو اختصار للمصطلح الثنائي - وهي كلمة آلية. كلمة الآلة - ببساطة، هذه هي كمية البيانات التي يمكن للمعالج معالجتها في عملية واحدة. في السابق، كان حجم كلمة الآلة هو نفس أصغر ذاكرة قابلة للعنونة. في Java، يمكن للمتغيرات تخزين قيم البايت فقط. كما قلت أعلاه، هناك نوعان من المتغيرات في جافا: الأنواع البدائية في Java: إنها ليست بدائية جدًا - 1
  • تقوم أنواع Java الأولية بتخزين قيمة بايتات البيانات مباشرة (سننظر في أنواع هذه الأوليات بمزيد من التفاصيل أدناه)؛
  • نوع مرجعي، يخزن بايتات عنوان الكائن في الكومة، أي أنه من خلال هذه المتغيرات يمكننا الوصول مباشرة إلى الكائن نفسه (نوع من جهاز التحكم عن بعد للكائن)

جافا بايت

لذا، أعطانا التاريخ بايتًا - وهو الحد الأدنى من الذاكرة التي يمكننا استخدامها. ويتكون من 8 بت. أصغر نوع بيانات صحيح في جافا هو بايت. هذا نوع 8 بت موقّع. ماذا يعني ذلك؟ دعونا نحسب. 2^8 هو 256. لكن ماذا لو أردنا رقمًا سالبًا؟ وقرر مطورو Java أن الرمز الثنائي "10000000" سيمثل -128، أي أن البت الأكثر أهمية (أقصى اليسار) سيشير إلى ما إذا كان الرقم سالبًا. الثنائي "0111 1111" يساوي 127. أي أنه لا يمكن تحديد 128 بأي شكل من الأشكال، لأن سيكون -128. يتم تقديم الحساب الكامل في هذه الإجابة: لماذا يتراوح نطاق البايتات من -128 إلى 127 في Java؟ لفهم كيفية الحصول على الأرقام، عليك أن تنظر إلى الصورة:
الأنواع البدائية في Java: إنها ليست بدائية جدًا - 2
وعليه، لحساب الحجم 2^(8-1) = 128. وهذا يعني أن الحد الأدنى (وبه ناقص) سيكون -128. والحد الأقصى هو 128 - 1 (اطرح صفرًا). وهذا يعني أن الحد الأقصى سيكون 127. في الواقع، نحن لا نعمل مع نوع البايت في كثير من الأحيان على "مستوى عالٍ". هذا هو في الأساس معالجة البيانات "الخام". على سبيل المثال، عند العمل مع نقل البيانات عبر الشبكة، عندما تكون البيانات عبارة عن مجموعة من 0 و1 يتم إرسالها عبر نوع ما من قنوات الاتصال. أو عند قراءة البيانات من الملفات. يمكن استخدامها أيضًا عند العمل مع السلاسل والترميزات. رمز المثال:
public static void main(String []args){
        byte value = 2;
        byte shortByteValue = 0b10; // 2
        System.out.println(shortByteValue);
        // Начиная с JDK7 мы можем разделять литералы подчёркиваниями
        byte minByteValue = (byte) 0B1000_0000; // -128
        byte maxByteValue = (byte) 0b0111_1111; // 127
        byte minusByteValue = (byte) 0b1111_1111; // -128 + 127
        System.out.println(minusByteValue);
        System.out.println(minByteValue + " to " + maxByteValue);
}
بالمناسبة، لا أعتقد أن استخدام نوع البايت سيقلل من استهلاك الذاكرة. يتم استخدام البايت بشكل أساسي لتقليل استهلاك الذاكرة عند تخزين البيانات في المصفوفات (على سبيل المثال، تخزين البيانات المستلمة عبر الشبكة في بعض المخزن المؤقت، والتي سيتم تنفيذها كمصفوفة بايت). ولكن عند إجراء العمليات على البيانات، فإن استخدام البايت لن يلبي توقعاتك. ويرجع ذلك إلى تطبيق Java Virtual Machine (JVM). نظرًا لأن معظم الأنظمة 32 أو 64 بت، فسيتم تحويل البايت والقصير أثناء العمليات الحسابية إلى 32 بت int، وهو ما سنتحدث عنه لاحقًا. وهذا يجعل الحسابات أسهل. لمزيد من التفاصيل، راجع هل يتم تحويل إضافة البايت إلى int بسبب قواعد لغة Java أم بسبب jvm؟ . تحتوي الإجابة أيضًا على روابط إلى JLS (مواصفات لغة Java). بالإضافة إلى ذلك، قد يؤدي استخدام البايت في المكان الخطأ إلى لحظات محرجة:
public static void main(String []args){
        for (byte i = 1; i <= 200; i++) {
            System.out.println(i);
        }
}
سيكون هناك حلقة هنا. لأن قيمة العداد تصل إلى الحد الأقصى (127)، سيحدث تجاوز وستصبح القيمة -128. ولن نخرج من الدائرة أبدا.

قصير

الحد الأقصى لقيم البايت صغير جدًا. لذلك، بالنسبة لنوع البيانات التالي، قررنا مضاعفة عدد البتات. أي أنها الآن ليست 8 بتات، بل 16. أي 2 بايت. ويمكن حساب القيم بنفس الطريقة. 2^(16-1) = 2^15 = 32768. وهذا يعني أن النطاق يتراوح من -32768 إلى 32767. ونادرًا ما يتم استخدامه في أي حالات خاصة. كما تخبرنا وثائق لغة Java: " يمكنك استخدام الاختصار لحفظ الذاكرة في المصفوفات الكبيرة ."

كثافة العمليات

لذلك وصلنا إلى النوع الأكثر استخدامًا. يستغرق 32 بت، أو 4 بايت. بشكل عام، نواصل مضاعفة. يتراوح نطاق القيم من -2^31 إلى 2^31 – 1.

الحد الأقصى لقيمة int

الحد الأقصى لقيمة int 2147483648 هو 1، وهي ليست صغيرة على الإطلاق. كما ذكر أعلاه، لتحسين الحسابات، لأن تعد أجهزة الكمبيوتر الحديثة أكثر ملاءمة للعد، مع الأخذ في الاعتبار سعة البت الخاصة بها، ويمكن تحويل البيانات ضمنيًا إلى int. إليك مثال بسيط:
byte a = 1;
byte b = 2;
byte result = a + b;
مثل هذه التعليمات البرمجية غير الضارة، لكننا حصلنا على الخطأ: "خطأ: أنواع غير متوافقة: تحويل محتمل مع فقدان البيانات من int إلى byte." سيتعين عليك تصحيحها إلى نتيجة البايت = (بايت)(a + b); ومثال آخر غير ضار. ماذا يحدث لو قمنا بتشغيل الكود التالي؟
int value = 4;
System.out.println(8/value);
System.out.println(9/value);
System.out.println(10/value);
System.out.println(11/value);
وسوف نحصل على النتيجة
2
2
2
2
*أصوات الذعر*
والحقيقة هي أنه عند العمل مع قيم int، يتم التخلص من الباقي، مما يترك الجزء بأكمله فقط (في مثل هذه الحالات، من الأفضل استخدام double).

طويل

نواصل المضاعفة. نضرب 32 في 2 ونحصل على 64 بت. حسب التقليد، هذا هو 4 * 2، أي 8 بايت. نطاق القيم من -2^63 إلى 2^63 – 1. أكثر من كافي. يتيح لك هذا النوع حساب أعداد كبيرة وكبيرة. غالبا ما تستخدم عند العمل مع الوقت. أو لمسافات طويلة مثلا. للإشارة إلى أن الرقم طويل، ضع حرف L – طويل بعد الرقم. مثال:
long longValue = 4;
longValue = 1l; // Не ошибка, но плохо читается
longValue = 2L; // Идеально
أود أن أتقدم على نفسي. بعد ذلك، سننظر في حقيقة وجود أغلفة مناسبة للأوليات، مما يجعل من الممكن العمل مع الأوليات ككائنات. ولكن هناك ميزة مثيرة للاهتمام. إليك مثال: باستخدام نفس المترجم عبر الإنترنت Tutorialspoint، يمكنك التحقق من الكود التالي:
public class HelloWorld {

     public static void main(String []args) {
        printLong(4);
     }

    public static void printLong(long longValue) {
        System.out.println(longValue);
    }
}
هذا الرمز يعمل بدون أخطاء، كل شيء على ما يرام. ولكن بمجرد استبدال النوع الموجود في طريقة printLong من long إلى long (أي أن النوع لا يصبح بدائيًا، بل كائنًا)، يصبح من غير الواضح لـ Java ما هي المعلمة التي نمررها. يبدأ بافتراض أنه يتم إرسال int وسيكون هناك خطأ. لذلك، في حالة الطريقة، سيكون من الضروري الإشارة بوضوح إلى 4L. في كثير من الأحيان يتم استخدام long كمعرف عند العمل مع قواعد البيانات.

جافا تعويم وجافا مزدوجة

تسمى هذه الأنواع أنواع النقطة العائمة. أي أن هذه ليست أنواعًا صحيحة. النوع العائم هو 32 بت (مثل int)، والنوع المزدوج يسمى النوع مزدوج الدقة، لذا فهو 64 بت (مضربًا في 2، تمامًا كما نحب). مثال:
public static void main(String []args){
        // float floatValue = 2.3; lossy conversion from double to float
        float floatValue = 2.3F;
        floatValue = 2.3f;
        double doubleValue = 2.3;
        System.out.println(floatValue);
        double cinema = 7D;
}
وإليك مثال على اختلاف القيم (بسبب دقة الكتابة):
public static void main(String []args){
        float piValue = (float)Math.PI;
        double piValueExt = Math.PI;
        System.out.println("Float value: " + piValue );
        System.out.println("Double value: " + piValueExt );
 }
وتستخدم هذه الأنواع البدائية في الرياضيات، على سبيل المثال. هذا هو الدليل، وهو ثابت لحساب الرقم PI . حسنًا، بشكل عام، يمكنك إلقاء نظرة على واجهة برمجة التطبيقات (API) لفئة الرياضيات. إليك ما يجب أن يكون مهمًا ومثيرًا للاهتمام أيضًا: حتى الوثائق تقول: " لا ينبغي أبدًا استخدام نوع البيانات هذا لقيم دقيقة، مثل العملة. للقيام بذلك، ستحتاج إلى استخدام فئة java.math.BigDecimal بدلاً من ذلك. تغطي الأرقام والسلاسل BigDecimal والفئات المفيدة الأخرى التي توفرها منصة Java. " وهذا يعني أن الأموال العائمة والمضاعفة لا تحتاج إلى حساب. مثال على الدقة باستخدام مثال العمل في وكالة ناسا: Java BigDecimal، التعامل مع الحسابات عالية الدقة حسنًا، لتشعر بذلك بنفسك:
public static void main(String []args){
        float amount = 1.0000005F;
        float avalue = 0.0000004F;
        float result = amount - avalue;
        System.out.println(result);
}
اتبع هذا المثال، ثم أضف 0 قبل الرقمين 5 و 4. وسترى كل الرعب) هناك تقرير مثير للاهتمام باللغة الروسية حول التعويم والمضاعف حول الموضوع: https://youtu.be/1RCn5ruN1fk أمثلة على العمل مع BigDecimal يمكن رؤيته هنا: اصنع سنتًا باستخدام BigDecimal بالمناسبة، يمكن لـ float وdouble إرجاع أكثر من مجرد رقم. على سبيل المثال، المثال أدناه سوف يعيد Infinity:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        System.out.println(positive_infinity);
}
وهذا سيعود NAN:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        double negative_infinity = -15.0 / 0;
        System.out.println(positive_infinity + negative_infinity);
}
الأمر واضح بشأن اللانهاية. ما هو نان؟ هذا ليس رقمًا ، مما يعني أنه لا يمكن حساب النتيجة وليست رقمًا. إليك مثال: نريد حساب الجذر التربيعي لـ -4. الجذر التربيعي لـ 4 هو 2. أي أنه يجب تربيع 2 ومن ثم نحصل على 4. ما الذي يجب تربيعه للحصول على -4؟ لن ينجح الأمر، لأن... إذا كان هناك رقم موجب، فسيبقى. وإذا كان سلبيا، فإن ناقص ناقص سيعطي زائد. أي أنها غير قابلة للحساب.
public static void main(String []args){
        double sqrt = Math.sqrt(-4);
        System.out.println(sqrt + 1);
        if (Double.isNaN(sqrt)) {
           System.out.println("So sad");
        }
        System.out.println(Double.NaN == sqrt);
}
إليك نظرة عامة رائعة أخرى حول موضوع أرقام الفاصلة العائمة: أين هي نقطتك؟

جافا منطقية

النوع التالي هو منطقي (النوع المنطقي). يمكنه فقط قبول القيم صحيح أو خطأ، وهي الكلمات الرئيسية. تستخدم في العمليات المنطقية مثل حلقات while، وفي التفرع باستخدام if، Switch. ما هي الأشياء المثيرة للاهتمام التي يمكنك اكتشافها هنا؟ حسنًا، على سبيل المثال، من الناحية النظرية، نحتاج فقط إلى بت واحد من المعلومات، 0 أو 1، أي صحيح أو خطأ. لكن في الواقع، سوف تشغل Boolean مساحة أكبر من الذاكرة وسيعتمد ذلك على تطبيق JVM المحدد. عادةً ما تكون هذه التكلفة هي نفس تكلفة int. خيار آخر هو استخدام BitSet. فيما يلي وصف قصير من كتاب Java Fundamentals: BitSet

جافا شار

لقد وصلنا الآن إلى النوع البدائي الأخير. لذا، فإن البيانات الموجودة في char تشغل 16 بت وتصف الحرف. تستخدم Java ترميز Unicode لـ char. يمكن ضبط الرمز وفقًا لجدولين (يمكنك رؤيته هنا ):
  • جدول أحرف Unicode
  • جدول أحرف ASCII
الأنواع البدائية في Java: إنها ليست بدائية جدًا - 3
مثال في الاستوديو:
public static void main(String[] args) {
    char symbol = '\u0066'; // Unicode
    symbol = 102; // ASCII
    System.out.println(symbol);
}
بالمناسبة، char، كونه رقمًا في الأساس، يدعم العمليات الرياضية مثل المجموع. وأحيانًا قد يؤدي هذا إلى عواقب مضحكة:
public class HelloWorld{

    public static void main(String []args){
        String costForPrint = "5$";
        System.out.println("Цена только для вас " +
        + costForPrint.charAt(0) + getCurrencyName(costForPrint.charAt(1)));
    }

    public static String getCurrencyName(char symbol) {
        if (symbol == '$') {
            return " долларов";
        } else {
            throw new UnsupportedOperationException("Not implemented yet");
        }
    }

}
أوصي بشدة بمراجعة IDE عبر الإنترنت من موقع Tutorialspoint . وعندما رأيت هذا اللغز في أحد المؤتمرات رفعت معنوياتي. أتمنى أن يعجبك المثال أيضًا) تم التحديث: كان هذا في Joker 2017، تقرير: " Java Puzzlers NG S03 - من أين أتيتم جميعًا؟! "

حرفية

الحرفي هو قيمة محددة بشكل صريح. باستخدام القيم الحرفية، يمكنك تحديد القيم في أنظمة أرقام مختلفة:
  • النظام العشري: 10
  • النظام الست عشري: 0x1F4، يبدأ بـ 0x
  • النظام الثماني: 010، يبدأ من الصفر.
  • النظام الثنائي (منذ Java7): 0b101، يبدأ عند 0b
أود أن أتطرق أكثر قليلاً إلى النظام الثماني، لأنه مضحك:
int costInDollars = 08;
لن يتم تجميع هذا السطر من التعليمات البرمجية:
error: integer number too large: 08
يبدو وكأنه هراء. الآن دعونا نتذكر النظامين الثنائي والثماني. لا يوجد اثنان في النظام الثنائي، لأن هناك قيمتان (تبدأ من 0). والنظام الثماني لديه 8 قيم تبدأ من الصفر. أي أن القيمة 8 نفسها غير موجودة. لذلك، فهذا خطأ يبدو للوهلة الأولى سخيفًا. وللتذكر، إليك قاعدة "المتابعة" لترجمة القيم:
الأنواع البدائية في Java: إنها ليست بدائية جدًا - 4

فئات المجمع

تحتوي العناصر الأولية في Java على فئات مجمعة خاصة بها بحيث يمكنك العمل معها ككائنات. أي أنه يوجد لكل نوع بدائي نوع مرجعي مطابق. الأنواع البدائية في Java: إنها ليست بدائية جدًا - 5فئات الغلاف غير قابلة للتغيير: هذا يعني أنه بمجرد إنشاء كائن، لا يمكن تغيير حالته - قيمة حقل القيمة. يتم الإعلان عن فئات الغلاف على أنها نهائية: الكائنات، إذا جاز التعبير، للقراءة فقط. وأود أيضًا أن أذكر أنه لا يمكن الوراثة من هذه الفئات. تقوم Java تلقائيًا بإجراء تحويلات بين الأنواع البدائية ومغلفاتها:
Integer x = 9;          // autoboxing
int n = new Integer(3); // unboxing
عملية تحويل الأنواع البدائية إلى أنواع مرجعية (int->Integer) تسمى autoboxing ، والعكس يسمى unboxing . تتيح هذه الفئات إمكانية حفظ كائن بدائي داخل كائن، وسيتصرف الكائن نفسه ككائن (حسنًا، مثل أي كائن آخر). مع كل هذا نحصل على عدد كبير من الأساليب الثابتة المتنوعة والمفيدة، مثل مقارنة الأرقام، وتحويل الرمز إلى حالة، وتحديد ما إذا كان الرمز حرفًا أم رقمًا، والبحث عن الحد الأدنى للرقم، وما إلى ذلك. تعتمد مجموعة الوظائف المتوفرة فقط على الغلاف نفسه. مثال على التنفيذ الخاص بك للمجمع لـ int:
public class CustomerInt {

   private final int value;

   public CustomerInt(int value) {
       this.value = value;
   }

   public int getValue() {
       return value;
   }
}
الحزمة الرئيسية، java.lang، لديها بالفعل تطبيقات للفئات Boolean، Byte، Short، Character، Integer، Float، Long، Double، ولا نحتاج إلى إنشاء أي شيء خاص بنا، ولكن فقط إعادة استخدام الحزمة الجاهزة تلك. على سبيل المثال، تمنحنا هذه الفئات القدرة على إنشاء قائمة، على سبيل المثال ، لأن القائمة يجب أن تحتوي فقط على كائنات، وهي ليست كذلك. لتحويل قيمة من النوع البدائي، هناك أساليب valueOf ثابتة، على سبيل المثال، Integer.valueOf(4) ستُرجع كائنًا من النوع Integer. للتحويل العكسي، توجد طرق intValue() وlongValue() وما إلى ذلك. يقوم المترجم بإدراج استدعاءات إلى valueOf و*Value من تلقاء نفسه، وهذا هو جوهر التشغيل التلقائي والإلغاء التلقائي. كيف يبدو مثال التعبئة التلقائية والتفريغ التلقائي الموضح أعلاه:
Integer x = Integer.valueOf(9);
int n = new Integer(3).intValue();
يمكنك قراءة المزيد حول التعبئة التلقائية والتفريغ التلقائي في هذه المقالة .

يقذف

При работе с примитивами существует такое понятие How приведение типов, одно из не очень приятных свойств C++, тем не менее приведение типов сохранено и в языке Java. Иногда мы сталкиваемся с такими ситуациями, когда нам нужно совершать взаимодействия с данными разных типов. И очень хорошо, что в некоторых ситуациях это возможно. В случае с ссылочными переменными, там свои особенности, связанные с полиморфизмом и наследованием, но сегодня мы рассматриваем простые типы и соответственно приведение простых типов. Существует преобразование с расширением и преобразование сужающее. Всё на самом деле просто. Если тип данных становится больше (допустим, был int, а стал long), то тип становится шире (из 32 бит становится 64). И в этом случае мы не рискуем потерять данные, т.к. если влезло в int, то в long влезет тем более, поэтому данное приведение мы не замечаем, так How оно осуществляется автоматически. А вот в обратную сторону преобразование требует явного указания от нас, данное приведение типа называется — сужение. Так сказать, чтобы мы сами сказали: «Да, я даю себе отчёт в этом. В случае чего — виноват сам».
public static void main(String []args){
   int intValue = 128;
   byte value = (byte)intValue;
   System.out.println(value);
}
Whatбы потом в таком случае не говорor что «Ваша Джава плохая», когда получат внезапно -128 instead of 128 ) Мы ведь помним, что в byteе 127 верхнее meaning и всё что находилось выше него соответственно можно потерять. Когда мы явно превратor наш int в byte, то произошло переполнение и meaning стало -128.

Область видимости

Это то место в codeе, где данная переменная будет выполнять свои функции и хранить в себе Howое-то meaning. Когда же эта область закончится, переменная перестанет существовать и будет стерта из памяти и. How уже можно догадаться, посмотреть or получить ее meaning будет невозможно! Так что же это такое — область видимости? الأنواع البدائية في Java: إنها ليست بدائية جدًا - 6Область определяется "блоком" — вообще всякой областью, замкнутой в фигурные скобки, выход за которые сулит удаление данных объявленных в ней. Или How минимум — сокрытие их от других блоков, открытых вне текущего. В Java область видимости определяется двумя основными способами:
  • Классом.
  • Методом.
Как я и сказал, переменная не видна codeу, если она определена за пределами блока, в котором она была инициализирована. Смотрим пример:
int x;
x = 6;
if (x >= 4) {
   int y = 3;
}
x = y;// переменная y здесь не видна!
И How итог мы получим ошибку:

Error:(10, 21) java: cannot find symbol
  symbol:   variable y
  location: class com.javaRush.test.type.Main
Области видимости могут быть вложенными (если мы объявor переменную в первом, внешнем блоке, то во внутреннем она будет видна).

Заключение

Сегодня мы познакомorсь с восемью примитивными типами в Java. Эти типы можно разделить на четыре группы:
  • Целые числа: byte, short, int, long — представляют собой целые числа со знаком.
  • Числа с плавающей точкой — эта группа включает себе float и double — типы, которые хранят числа с точностью до определённого знака после запятой.
  • Булевы значения — boolean — хранят значения типа "истина/ложь".
  • الأحرف - تتضمن هذه المجموعة نوع الحرف.
كما أظهر النص أعلاه، البدائيات في Java ليست بدائية جدًا وتسمح لك بحل العديد من المشكلات بفعالية. ولكن هذا يقدم أيضًا بعض الميزات التي يجب أن نأخذها في الاعتبار إذا كنا لا نريد مواجهة سلوك غير متوقع في برنامجنا. كما يقولون، عليك أن تدفع ثمن كل شيء. إذا أردنا بدائيًا بنطاق "شديد الانحدار" (واسع) - طويل مثلًا - فإننا نضحي بتخصيص جزء أكبر من الذاكرة وفي الاتجاه المعاكس. من خلال توفير الذاكرة واستخدام البايتات، نحصل على نطاق محدود من -128 إلى 127.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION