قواعد الترويج للمشغلين الثنائيين الموقعين وغير الموقعين
خذ بعين الاعتبار مقتطفات التعليمات البرمجية التالية:
// 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;
كيف يحدد عامل التشغيل نوع النتيجة الصحيح في هذه الحالات، نظرًا لاختلاف توقيع المعاملات؟
يتبع عامل التشغيل "التحويلات الحسابية المعتادة" القاعدة، التي تملي خطوات تحويل النوع بناءً على أنواع المعامل. وفقًا لهذه القاعدة، إذا كان أي من المعاملين هو:
منذ ذلك الحين int وunsigned int قابلان للتبادل في القاعدة، ويتم اختيار المعامل بالنوع الأوسع (unsigned int) كنوع النتيجة.
وهذا ما يفسر السبب في المقتطف 1، تكون النتيجة int (2147483648) غير موقعة وفي المقتطف 2، تكون النتيجة int (-1). يتم تحويل المعامل الموقع (neg) ضمنيًا إلى unsigned int، مما يؤدي إلى قيمة غير محددة في الحالة الأخيرة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3