نعم صادفت مثل هذه المشكلة ...
وعلى ما انض السبب انه يتعاملون مع ShortInteger وليس Byte
حيث اعلى قيمة بالموجب 127 واقل قيمة -128 ...
كذلك الحال مع بقية الانواع ( WORD,DWORD,QWORD )
ربما يعلمون بوجود مثل هذا الخطا ان كان خطاً ...
واضن السبب :
اننا في الـ Decmal نستعمل العدااد ذات الإشارات وليس كما في الـ Hex لا توجد إشارات
لذلك هم يستعملون الاعداد الصحيحه عندما نختار الـ Dec و العدد بدون إيشارات بالـ Hex
----
ربما يوجد خطأ املائي في كتابة التعيلمتين ( Lsh , Rsh ) ... بينما تكتب ( Shr , Shl )
إقتباس :لا يهم كيف يتم التعامل مع الاعداد (موجب أم سالب)
البايت دائما موجب +
هممم ...
فعلاً ... يوجد بكلامك جزء من الصحة , وهذه النقطة يوجد بها قليلاً من الغموض P:
لكن لا أضن انه Bug ...
وجدت نفس هذا النظام متبع في OllyDBG :
كود :
http://im31.gulfup.com/k4x1c.png
ماذا نسمي الامر الآن Bug ... ام شيء آخر
-----
لاحظ في الصورة المرفقة ... فيه القيمة التي كنا نتوقع ظهورها ... حيث الـ 255 = FF .... في خانة الـ Unsigned
كذلك لاحظ انه عندما تكتب العدد 25 من نوع Byte وبعد ذلك تضغط على الزر + ستجد انه تم إضافة بتات للقيمة البايت ...
وهذا يشير إلى ان الآلة الحاسبة تحسب حساب الإشارة على حساب الـ Byte في الـ Decmal ... وعندما نحول القيمة للـ Hex
فينه يتم التحويل على حسب القيمة الموجودة في الـ Bin
ليس في الأمر علة (bug) لأن الآلة الحاسبة تتعامل مع الأعداد باعتبارها أعداد ذات إشارة (Signed Numbers) بما في ذلك البايت (Byte) أي أن القيم في هذه الحالة تتراوح بين -128 و 127 و بالتالي لا يمكنك وضع القيمة 255 في البايت (أو بالأصح سيتم اعتبار أنها -1 لأن جميع البتات ستكون قيمتها 1).
إقتباس :لا يهم كيف يتم التعامل مع الاعداد (موجب أم سالب)
البايت دائما موجب +
إذا كانتت البايت بمفهوم الحجم (8 بت) فهناك بايت سالبة، و هذا النوع (Signed Byte) أي البايت ذات الإشارة موجود في كل لغات البرمجة الحديثة، فهو يعرف في لغات الـ DotNET باسم SByte و في Delphi باسم Shortint.