"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف تحدد التحويلات الحسابية المعتادة نوع النتيجة من عوامل التشغيل الثنائية \"+\" ذات المعاملات الموقعة وغير الموقعة؟

كيف تحدد التحويلات الحسابية المعتادة نوع النتيجة من عوامل التشغيل الثنائية \"+\" ذات المعاملات الموقعة وغير الموقعة؟

تم النشر بتاريخ 2024-12-22
تصفح:412

How Do Usual Arithmetic Conversions Determine the Result Type of Binary \

قواعد الترويج للمشغلين الثنائيين الموقعين وغير الموقعين

خذ بعين الاعتبار مقتطفات التعليمات البرمجية التالية:

// Snippet 1
int max = std::numeric_limits::max();
unsigned int one = 1;
unsigned int result = max   one;
// Snippet 2
unsigned int us = 42;
int neg = -43;
int result = us   neg;

كيف يحدد عامل التشغيل نوع النتيجة الصحيح في هذه الحالات، نظرًا لاختلاف توقيع المعاملات؟

يتبع عامل التشغيل "التحويلات الحسابية المعتادة" القاعدة، التي تملي خطوات تحويل النوع بناءً على أنواع المعامل. وفقًا لهذه القاعدة، إذا كان أي من المعاملين هو:

  • مزدوج طويل، فسيتم تحويل كلا المعاملين إلى مزدوج طويل.
  • مزدوج، يتم تحويل كلا المعاملين إلى مزدوج.
  • float، يتم تحويل كلا المعاملين إلى float.
  • طويل غير موقع، يتم تحويل المعامل الآخر إلى طويل غير موقع.
  • طويل int والمعامل الآخر unsigned int، يتم تحويل كلا المعاملين إلى unsigned long int إذا كان من الممكن تمثيل قيمة int غير الموقعة في int طويل؛ خلاف ذلك، يتم تحويل كلاهما إلى طويل.
  • طويل، يتم تحويل المعامل الآخر إلى طويل.
  • غير موقع، يتم تحويل المعامل الآخر إلى غير موقع.

منذ ذلك الحين int وunsigned int قابلان للتبادل في القاعدة، ويتم اختيار المعامل بالنوع الأوسع (unsigned int) كنوع النتيجة.

وهذا ما يفسر السبب في المقتطف 1، تكون النتيجة int (2147483648) غير موقعة وفي المقتطف 2، تكون النتيجة int (-1). يتم تحويل المعامل الموقع (neg) ضمنيًا إلى unsigned int، مما يؤدي إلى قيمة غير محددة في الحالة الأخيرة.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3