سؤال

ولقد وقعت أرقام (تكملة 2S) المخزنة في الأعداد الصحيحة 32 بت، وأريد أن استخراج حقول 16 بت منها. هل صحيح أنني إذا استخراج منخفضة 16 بت من عدد وقعت 32 بت، والنتيجة سوف تكون صحيحة طالما أن العدد الأصلي (32-بت) يلائم 16 بت؟

لأرقام موجبة صحيح مسلي، ويبدو أن لالسلبيات كذلك. ولكن يمكن إثبات ذلك؟

وشكرا مقدما

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

المحلول

نعم، في اثنين من استكمال بت علامة تمتد "على طول الطريق" إلى اليسار. عند يلقي قعت قصيرة إلى كثافة العمليات وقعت ثم الرقم "علامة تمديد" و لديها نفس القيمة.

وعلى سبيل المثال: Nibble (-2) = 1110 => Byte(-2) = 1111_1110

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

نصائح أخرى

من وجهة نظري (الثانية) قراءة سؤالك، فإنه لا يبدو كما لو كنت بحاجة إلى "انتزاع" أي بت، وإنما تحويل عدد صحيح؟

وأي بمعنى. تفعل شيئا مثل هذا:

int negative = -4711;
short x = (short) negative;

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

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