سؤال

لماذا لا جافا تشمل دعم غير موقعة الاعداد الصحيحه ؟

يبدو لي أن من الغريب ان يكون إغفال نظرا لأنها تسمح لأحد أن كتابة التعليمات البرمجية التي هي أقل من المحتمل أن تنتج يفيض على كبير بشكل غير متوقع الإدخال.

وعلاوة على ذلك, استخدام غير صحيحة يمكن أن يكون شكلا من أشكال الذاتي الوثائق ، حيث أنها تشير إلى أن القيمة التي unsigned int كان المقصود من عقد هو لم يكن من المفترض أن تكون سلبية.

وأخيرا في بعض الحالات غير صحيحة يمكن أن تكون أكثر كفاءة في عمليات معينة ، مثل شعبة.

ما هو الجانب السلبي بما في ذلك هذه ؟

هل كانت مفيدة؟

المحلول

وهذا من مقابلة مع فرخ الوز وغيرها ، عن البساطة:

<اقتباس فقرة>   

وفرخ الوز: بالنسبة لي كمصمم اللغة، وأنا لا تعول حقا نفسي في هذه الأيام، ما هو "بسيط" معنى انتهت حقا يمكن أن أتوقع J. المطور عشوائي لعقد المواصفات في رأسه. يقول هذا التعريف أن، على سبيل المثال، جافا ليس - في واقع الأمر الكثير من هذه اللغات في نهاية المطاف مع الكثير من الحالات الزاوية، والأشياء التي لا أحد يفهم حقا. مسابقة أي مطور C عن غير موقعة، وقريبا جدا تكتشف أن المطورين لا يكاد C فهم في الواقع ما يدور مع غير موقعة، ما الحساب غير موقعة هو. اشياء من هذا القبيل جعلت C تعقيدا. الجزء لغة جافا، وأعتقد أن وبسيطة جدا. المكتبات لديك للبحث عن.

نصائح أخرى

قراءة ما بين السطور ، أعتقد أن المنطق كان شيئا من هذا القبيل:

  • عموما, جافا المصممين أردت تبسيط ذخيرة من أنواع البيانات المتاحة
  • الحياة اليومية, ورأوا أن الحاجة الأكثر شيوعا كانت وقعت أنواع البيانات
  • من أجل تنفيذ بعض الخوارزميات غير موقعة الحساب اللازم أحيانا ، ولكن هذا النوع من المبرمجين أن يكون تنفيذ مثل هذه الخوارزميات أيضا المعرفة "عمل جولة" فعل غير موقعة الحساب مع توقيع أنواع البيانات

في الغالب, أود أن أقول أنه كان قرار معقول.وربما كنت قد:

  • جعلت بايت غير موقعة, أو على الأقل قدمت وقعت موقعة البدائل ، وربما مع أسماء مختلفة ، هذا نوع بيانات واحد (مما يجعل من توقيع جيد الاتساق ، ولكن متى احتجت توقيع بايت?)
  • القيام به بعيدا مع 'قصيرة' (متى آخر مرة استخدام 16-بت الحساب؟)

لا يزال, مع قليلا من kludging العمليات على غير موقع قيم تصل إلى 32 بت لا tooo سيئة, و معظم الناس لا تحتاج غير موقعة 64 بت شعبة أو المقارنة.

هذا هو أقدم سؤال بات لم أذكر بإيجاز شار أنا مجرد التفكير في أن يتوسع في هذا للآخرين الذين سوف ننظر في هذا الطريق.دعونا نلقي نظرة فاحصة على جافا بدائية أنواع:

byte - 8-بت عدد صحيح

short - 16-بت عدد صحيح

int - 32-بت عدد صحيح

long - 64-بت عدد صحيح

char - 16-بت حرف (غير صحيح)

على الرغم من أن char لا يدعم unsigned الحساب هذا الأساس يمكن أن يعامل unsigned عدد صحيح.سيكون لديك صراحة يلقي العمليات الحسابية مرة أخرى إلى char, لكنه لا نقدم لك طريقة تحديد unsigned الأرقام.

char a = 0;
char b = 6;
a += 1;
a = (char) (a * b);
a = (char) (a + b);
a = (char) (a - 16);
b = (char) (b % 3);
b = (char) (b / a);
//a = -1; // Generates complier error, must be cast to char
System.out.println(a); // Prints ? 
System.out.println((int) a); // Prints 65532
System.out.println((short) a); // Prints -4
short c = -4;
System.out.println((int) c); // Prints -4, notice the difference with char
a *= 2;
a -= 6;
a /= 3;
a %= 7;
a++;
a--;

نعم, ليس هناك الدعم المباشر غير صحيحة (من الواضح أنني لا يجب أن يلقي معظم العمليات مرة أخرى في شار إذا كان هناك دعم مباشر).ومع ذلك ، هناك بالتأكيد موجود غير موقعة نوع البيانات البدائية.أود أن يحب أن ينظر إلى غير موقعة بايت فضلا, ولكن أعتقد مضاعفة الذاكرة التكلفة بدلا من استخدام شار هو خيارا قابلا للتطبيق.


تحرير

مع JDK8 هناك واجهات برمجة التطبيقات الجديدة على Long و Integer والتي توفر الطرق المساعد عند علاج long و int قيم غير القيم.

  • compareUnsigned
  • divideUnsigned
  • parseUnsignedInt
  • parseUnsignedLong
  • remainderUnsigned
  • toUnsignedLong
  • toUnsignedString

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

وجافا لديها أنواع غير موقعة، أو واحد على الأقل: شار هو غير موقعة قصيرة. وبغض النظر عن عذر يلقي فرخ الوز حتى انها في الحقيقة مجرد جهله لماذا لا توجد أنواع غير موقعة أخرى.

وأنواع أيضا قصيرة: تستخدم شورت كل وقت للوسائط المتعددة. والسبب هو أنك يمكن أن يصلح 2 العينات في واحدة عمليات طويلة والعديد من vectorize غير موقعة 32 بت. نفس الشيء مع البيانات 8 بت وبايت غير موقعة. يمكنك تناسب 4 أو 8 عينات في سجل لكمية موجهة.

وبمجرد أن وقعت وتختلط [إينتس] غير موقعة في تعبير تبدأ الأمور للحصول فوضى وربما كنت <م> سوف تفقد المعلومات. تقييد جافا ل[إينتس] قعت يزيل فقط حقا الامور. أنا سعيد لأنني لم يكن لديك ما يدعو للقلق كلها وقعت / الأعمال غير الموقعة، على الرغم من أنني في بعض الأحيان لا تفوت قليلا 8th على بايت.

http://skeletoncoder.blogspot.com/ 2006/09 / جافا دروس-لماذا-لا-unsigned.html

وهذا الرجل يقول لمستوى C يحدد العمليات التي تنطوي على [إينتس] غير موقعة وقعت إلى أن تعامل على أنها غير موقعة. وهذا يمكن أن يسبب الأعداد الصحيحة وقعت السلبية للفة حول في صحيح غير الموقعة كبير، مما يمكن أن يسبب الخلل.

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

أما عن النصائح العملية:

  • إذا كانت القيم الخاصة بك إلى حد ما حجم التعسفي و لا تناسب int, استخدام long.إذا كانت لا تنسجم مع long استخدام BigInteger.

  • استخدام أصغر أنواع فقط من أجل المصفوفات عندما تحتاج إلى توفير مساحة.

  • إذا كنت بحاجة بالضبط 64/32/16/8 بت, استخدام long/int/short/byte والتوقف عن القلق حول علامة قليلا ، باستثناء شعبة, مقارنة, حق العمل, الصب.

انظر أيضا هذا الإجابة عن "ترقية مولد رقم عشوائي من C إلى جافا".

JDK8 لديها بعض الدعم لهم.

ونحن قد نرى بعد الدعم الكامل من أنواع غير موقعة في جاوة على الرغم من المخاوف فرخ الوز و.

وأنا أعرف هذا المنصب قديمة جدا؛ ولكن لاهتمامك، في جاوة 8 و في وقت لاحق، يمكنك استخدام نوع البيانات int لتمثيل غير الموقعة عدد صحيح 32 بت، والتي لديها قيمة الحد الأدنى من 0 والقيمة القصوى من 2 <سوب> 32 -1 . استخدام فئة Integer استخدام نوع البيانات int كعدد غير موقعة وأساليب ثابتة مثل compareUnsigned()، divideUnsigned() الخ تم إضافتها إلى فئة Integer لدعم العمليات الحسابية للالأعداد الصحيحة غير الموقعة.

ولقد سمعت قصصا أنهم لإدراجها على مقربة من الإفراج جافا أصلي. والبلوط مقدمة لجافا، وفي بعض الوثائق المواصفات كان هناك ذكر للقيم usigned. للأسف هذه لم يصل إلى لغة جافا. بقدر ما كان أحد قادرا على معرفة انهم فقط لم تحصل على تنفيذها، على الأرجح بسبب ضيق الوقت.

وأنا مرة واحدة أخذت C ++ طبعا مع شخص ما في لجنة المعايير C ++ الذي يعني ضمنا أن جافا اتخذ القرار الصحيح لتجنب الاضطرار الأعداد الصحيحة غير الموقعة ل(1) معظم البرامج التي تستخدم الأعداد الصحيحة غير موقعة يمكن القيام به فقط، وكذلك مع الأعداد الصحيحة وقعت وهذا هو أكثر طبيعية من حيث كيف يفكر الناس، و (2) باستخدام الأعداد الصحيحة النتائج غير موقعة في الكثير سهلة لإنشاء ولكن من الصعب تصحيح الأخطاء وحل المشكلات مثل تجاوز عدد صحيح الحسابي وفقدان بت كبيرة عند تحويل بين أنواع الموقعة وغير الموقعة. إذا كنت طرح بطريق الخطأ 1 من 0 باستخدام الأعداد الصحيحة وقعت فإنه يتسبب في كثير من الأحيان بشكل أسرع برنامج لتحطم ويجعل من السهل العثور على خلل مما لو يلتف حولها إلى 2 ^ 32-1، والمجمعين وأدوات تحليل ساكنة والشيكات وقت أن أفترض أنك تعرف ما تفعلونه منذ اخترت استخدام الحساب غير موقعة. أيضا، الأرقام السالبة مثل -1 غالبا ما تمثل شيئا مفيدا، مثل حقل يتم تجاهل / المتعثرة / إلغاء تعيين بينما لو كنت تستخدم غير موقعة كنت قد لحجز قيمة خاصة مثل 2 ^ 32 - 1 أو شيئا من هذا القبيل

ومنذ زمن بعيد، عندما الذاكرة كان محدودا ولم المعالجات لا تعمل تلقائيا على 64 بت في وقت واحد، عد كل شيء أكثر من ذلك بكثير، لذلك بعد أن وقعت ضد بايت غير موقعة أو السراويل القصيرة يهم في الواقع الكثير من الأحيان، وكان من الواضح أن الحق في القرار التصميم . اليوم فقط باستخدام الباحث وقعت أكثر من كافية في الحالات البرمجة العادية كلها تقريبا، وإذا كان البرنامج يحتاج حقا إلى استخدام قيم أكبر من 2 ^ 31-1، كنت كثيرا ما ترغب فقط في فترة طويلة على أي حال. مرة كنت في أراضي باستخدام صفقات الشراء، حتى انه من الصعب التوصل إلى سبب لماذا حقا لا يمكن الحصول عليه مع 2 ^ 63-1 الأعداد الصحيحة الموجبة. كلما نذهب إلى 128 المعالجات قليلا انها سوف تكون حتى أقل من قضية.

السؤال هو "لماذا لا دعم جافا غير موقعة رجات"?

و جوابي على سؤالك هو أن جافا يريد أن جميع من انها بدائية أنواع: بايت, شار, قصيرة, الباحث و طويلة ينبغي أن يعامل بايت, كلمة, dword و qword على التوالي ، تماما مثل في الجمعية ، جافا مشغلي توقيع العمليات على جميع أنواع بدائية باستثناء شار, ولكن فقط على شار وهي غير موقعة 16 بت فقط.

لذلك أساليب ثابتة من المفترض أن يكون غير موقعة العمليات أيضا على كل من 32 و 64 بت.

تحتاج النهائية الصف الذي أساليب ثابتة يمكن أن يطلق على غير موقعة عمليات.

يمكنك إنشاء هذا النهائي الدرجة ، الذي يطلق عليه أي اسم تريده وتنفيذ إنها أساليب ثابتة.

إذا كان لديك أي فكرة حول كيفية تنفيذ أساليب ثابتة ثم هذا الرابط قد تساعدك.

في رأيي, جافا لا على غرار C++ في كل, ، إذا كان لا دعم غير موقعة أنواع ولا عامل الحمولة الزائدة ، لذلك أعتقد أن جافا يجب أن تعامل على أنها مختلفة تماما اللغة من كل من C++ و من C.

بل هو أيضا مختلفة تماما في اسم اللغات بالمناسبة.

لذلك أنا لا أنصح في جافا رمز نوع مماثل C لا ننصح رمز نوع مماثل C++ في كل شيء ، لأن ذلك في جافا أنك لن تكون قادرة على أن تفعل ما تريد القيام به المقبل في C++ ، أيرمز لن يستمر C++ مثل في كل شيء وبالنسبة لي هذا أمر سيء إلى رمز مثل ذلك إلى تغيير نمط في الوسط.

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

كما أوصي إلى تجنب استخدام قصيرة, الباحث و طويلة أنواع بدائية ، واستخدام كلمة, dword و qword على التوالي بدلا عن استدعاء أساليب ثابتة عن غير عمليات و/أو توقيع العمليات بدلا من استخدام المشغلين.

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

فعلا كلمة, dword و qword هللا توجد في اللغة ، ولكن يمكنك إنشاء فئة جديدة لكل وتنفيذ كل ينبغي أن يكون من السهل جدا:

الطبقة كلمة يحمل نوع بدائي قصيرة فقط الفئة dword يحمل نوع بدائي الباحث فقط الطبقة qword يحمل نوع بدائي طويلة فقط.الآن كل غير الموقعة وغير الموقعة أساليب ثابتة أو لا حسب اختيارك, يمكنك تنفيذ في كل فئة ، أيكل 16 بت في عمليات غير الموقعة وقعت خلال إعطاء معنى أسماء على كلمة فئة جميع 32 بت العمليات على حد سواء غير الموقعة وقعت خلال إعطاء معنى أسماء على dword فئة وكل 64 بت العمليات على حد سواء غير الموقعة وقعت خلال إعطاء معنى أسماء على qword فئة.

إذا كنت لا ترغب في إعطاء الكثير من أسماء مختلفة لكل طريقة, يمكنك دائما استخدام الحمولة الزائدة في جاوة ، من الجيد أن تقرأ هذا لم جافالا إزالة هذا أيضا!

إذا كنت تريد أساليب بدلا من مشغلي 8 بت وقعت عمليات وطرق 8 بت غير موقعة العمليات التي لا المشغلين في كل شيء ، ثم يمكنك إنشاء بايت فئة (لاحظ أن الحرف الأول " ب " هو رأس المال ، لذلك ليس هذا هو نوع بدائي بايت) وتنفيذ الطرق في هذه الفئة.

عن المارة قيمة وفاة المرجع:

إذا أنا لست مخطئا في مثل C#, بدائية الكائنات يتم تمريرها حسب القيمة بشكل طبيعي ، ولكن الطبقة الكائنات مرت الإشارة بشكل طبيعي ، وهذا يعني أن كائنات من نوع بايت, كلمة, dword و qword سيتم تمرير الإشارة لا من حيث القيمة بشكل افتراضي.أتمنى لو كان جافا البنية الكائنات C# ، لذلك كل بايت, كلمة, dword و qword يمكن أن تنفذ إلى البنية بدلا من الدرجة, لذا افتراضيا كانوا تمريرها حسب القيمة وليس بالرجوع افتراضيا ، مثل أي البنية الكائن في C# ، مثل أنواع بدائية ، يتم تمريرها حسب القيمة وليس بالرجوع افتراضيا ، ولكن بسبب أن جافا هو أسوأ من C# و علينا أن نتعامل مع ذلك, ثم هناك فقط الطبقات والواجهات ، التي يتم تمريرها من قبل المرجعية وليس حسب القيمة بشكل افتراضي.حتى إذا كنت تريد أن تمر بايت, كلمة, dword و qword الكائنات من حيث القيمة وليس بالرجوع مثل أي فئة أخرى الكائن في جاوة في C#, سيكون لديك ببساطة استخدام منشئ نسخة و هذا الأمر.

هذا هو الحل الوحيد الذي أستطيع التفكير به.أنا أتمنى فقط typedef البدائية أنواع الكلمة ، dword و qword ، ولكن Java لا يدعم الرموز المميزة ل typedef ولا يستعمل في كل شيء ، على عكس C# التي تدعم باستخدام, وهو ما يعادل ج typedef.

حول الإخراج:

لنفس تسلسل من البتات, يمكنك طباعتها في العديد من الطرق:كما الثنائية ، كما العشرية (مثل معنى %u في ج printf) ، كما ثماني (مثل معنى %س في ج printf) ، كما سداسي عشري (مثل معنى ٪ س في ج printf) وكما صحيح (مثل معنى ٪ د في ج printf).

لاحظ أن C printf لا يعرف نوع المتغيرات يجري تمرير المعلمات إلى وظيفة printf يعرف نوع كل متغير فقط من شار* الكائن الذي تم تمريره إلى المعلمة الأولى من الدالة.

وذلك في كل من الفئات: بايت, كلمة, dword و qword, يمكنك تنفيذ طباعة طريقة الحصول على وظائف printf ، على الرغم من نوع بدائي من الدرجة التوقيع, كنت لا تزال لا يمكن الطباعة على أنها غير موقعة من خلال اتباع بعض الخوارزمية التي تنطوي المنطقية عمليات التحول إلى الحصول على أرقام الطباعة إلى الإخراج.

للأسف الرابط أعطيتك لا تظهر كيفية تنفيذ هذه أساليب الطباعة, ولكن أنا متأكد من أنك يمكن أن جوجل خوارزميات تحتاج إلى تنفيذ الطباعة هذه الأساليب.

هذا كل ما أستطيع أن أجيب على سؤالك و أقترح عليك.

ولأن نوع unsigned هو شر محض.

والحقيقة أن في C unsigned - int تنتج unsigned هو أكثر شرا.

وهنا لقطة من المشكلة التي أحرقت لي أكثر من مرة:

// We have odd positive number of rays, 
// consecutive ones at angle delta from each other.
assert( rays.size() > 0 && rays.size() % 2 == 1 );

// Get a set of ray at delta angle between them.
for( size_t n = 0; n < rays.size(); ++n )
{
    // Compute the angle between nth ray and the middle one.
    // The index of the middle one is (rays.size() - 1) / 2,
    // the rays are evenly spaced at angle delta, therefore
    // the magnitude of the angle between nth ray and the 
    // middle one is: 
    double angle = delta * fabs( n - (rays.size() - 1) / 2 ); 

    // Do something else ...
}

هل لاحظت الأخطاء حتى الآن؟ أنا أعترف بأنني رأيت ذلك إلا بعد أن داس في مع المصحح.

ولأن n هو من نوع غير موقعة size_t يقيم n - (rays.size() - 1) / 2 التعبير بأكمله، unsigned. ويقصد من هذا التعبير أن يكون <م> قعت موقف راي nth من وسط واحد: أن أشعة 1ST من وسط واحد على الجانب الأيسر لديها موقف -1، واحد 1ST على اليمين سيكون له موقف +1، وما إلى ذلك وبعد أخذ قيمة القيمة المطلقة وضرب من قبل زاوية delta أود أن أحصل على الزاوية بين شعاع nth واحد الأوسط.

ولسوء الحظ بالنسبة لي التعبير أعلاه احتواء الشر غير موقعة وبدلا من تقييم، ويقول، -1، وتقييمها إلى 2 ^ 32-1. تحويل لاحقا إلى double مختومة علة.

وبعد خلل أو اثنين ناتج عن سوء استخدام واحد الحسابي unsigned لابد أن يبدأ أتساءل عما إذا كان بت إضافي واحد يحصل يستحق عناء إضافية. أحاول، قدر ما أمكن ذلك، لتجنب أي استخدام أنواع unsigned في الحساب، وإن كانت لا تزال تستخدم لعمليات غير حسابية مثل أقنعة الثنائية.

وهناك عدد قليل من الأحجار الكريمة في 'C' المواصفات التي ألقت جافا لأسباب واقعية ولكنها تتسلل ببطء مرة أخرى مع الطلب المطور (الإغلاق، الخ).

وأنا أذكر أول واحد لأنها تتعلق هذه المناقشة. التزام قيم المؤشر إلى الحساب صحيحا غير موقعة. وفيما يتعلق بهذا الموضوع موضوع، وصعوبة المحافظة على دلالات غير الموقعة في العالم توقيع جاوة.

وأود أن أعتقد إذا كان للمرء أن يحصل دينيس ريتشي الأنا لتقديم المشورة فريق التصميم فرخ الوز وكان قد اقترح اعطاء لتوقيع على "صفر في اللانهاية"، بحيث طلبات تعويض كل عنوان من شأنه أولا تضيف لهم الجبرية RING SIZE لتفادي سلبية القيم.

وبهذه الطريقة، أي إزاحة القيت على مجموعة لا يمكن أبدا أن تولد SEGFAULT. على سبيل المثال في فئة مغلفة الذي أسميه RingArray الزوجي الذي يحتاج السلوك غير الموقعة - في "الذات تدور حلقة" السياق:

// ...
// Housekeeping state variable
long entrycount;     // A sequence number
int cycle;           // Number of loops cycled
int size;            // Active size of the array because size<modulus during cycle 0
int modulus;         // Maximal size of the array

// Ring state variables
private int head;   // The 'head' of the Ring
private int tail;   // The ring iterator 'cursor'
// tail may get the current cursor position
// and head gets the old tail value
// there are other semantic variations possible

// The Array state variable
double [] darray;    // The array of doubles

// somewhere in constructor
public RingArray(int modulus) {
    super();
    this.modulus = modulus;
    tail =  head =  cycle = 0;
    darray = new double[modulus];
// ...
}
// ...
double getElementAt(int offset){
    return darray[(tail+modulus+offset%modulus)%modulus];
}
//  remember, the above is treating steady-state where size==modulus
// ...

ما سبق RingArray لن من أي وقت مضى "الحصول على" من مؤشر سلبي، حتى إذا حاول الطالب الخبيثة. تذكر، وهناك أيضا العديد من الطلبات المشروعة لطلب قيم مؤشر (سلبي) السابقة.

ملحوظة:٪ معامل دي المراجع الخارجي الطلبات المشروعة في حين الداخلية أقنعة٪ معامل من الخبث السافر من السلبيات أكثر سلبية من -modulus. إذا كان لهذا أن تظهر أي وقت مضى في جافا + .. + 9 || 8 + .. + المواصفات، ثم المشكلة سوف تصبح حقا ل"مبرمج الذين لا يستطيعون" النفس تدوير "خطأ".

وأنا متأكد من أن ما يسمى جافا غير موقعة كثافة العمليات "نقص" يمكن أن تتكون لمع السالفة بطانة واحد.

وPS: فقط لإعطاء السياق إلى أعلى RingArray التدبير المنزلي، وهنا مرشح "مجموعة" عملية لتتناسب مع أعلاه 'الحصول على' عملية العنصر:

void addElement(long entrycount,double value){ // to be called only by the keeper of entrycount
    this.entrycount= entrycount;
    cycle = (int)entrycount/modulus;
    if(cycle==0){                       // start-up is when the ring is being populated the first time around
        size = (int)entrycount;         // during start-up, size is less than modulus so use modulo size arithmetic
        tail = (int)entrycount%size;    //  during start-up
    }
    else {
        size = modulus;
        head = tail;
        tail = (int)entrycount%modulus; //  after start-up
    }
    darray[head] = value;               //  always overwrite old tail
}

وأستطيع أن أفكر في واحد مؤسف الآثار الجانبية. في قواعد البيانات جافا جزءا لا يتجزأ، وعدد من هويات يمكن أن يكون مع حقل 32BIT وهو معرف 2 ^ 31، وليس 2 ^ 32 (~ 2billion، وليس ~ 4billion).

والسبب هو IMHO لأنها هي / هم كسول جدا لتنفيذ / تصحيح هذا الخطأ. مما يدل على أن المبرمجين C / C ++ لا يفهم غير موقعة، وهيكل، الاتحاد، العلم قليلا ... هل مجرد مناف للعقل.

والأثير كنت تتحدث مع باش / جافا مبرمج الأساسي / على وشك بداية برمجة على غرار C، دون أي معرفة حقيقية هذه اللغة أو كنت تتحدث للتو من عقلك. ؛)

وعند التعامل كل يوم على شكل إما من ملف أو الأجهزة التي تبدأ في التساؤل، ما في الجحيم كانوا يفكرون.

وخير مثال هنا سوف تحاول استخدام بايت غير موقعة كما الدورية النفس الحلقة. لأولئك منكم الذين لا يفهمون الجملة الأخيرة، كيف على الارض استدعاء نفسك مبرمج.

وDC

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top