Reglas de promoción para operadores binarios firmados y no firmados
Considere los siguientes fragmentos de código:
// 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;
¿Cómo determina el operador " " el tipo de resultado correcto en estos casos, dado el diferente signo de los operandos?
El operador sigue las "conversiones aritméticas habituales" regla, que dicta los pasos de conversión de tipos en función de los tipos de operandos. Según esta regla, si cualquiera de los operandos es:
Desde int y unsigned int son intercambiables en la regla, el operando con el tipo más amplio (unsigned int) se elige como tipo de resultado.
Esto explica por qué en En el fragmento 1, el resultado es unsigned int (2147483648) y en el fragmento 2, el resultado es int (-1). El operando firmado (neg) se convierte implícitamente a unsigned int, lo que da como resultado un valor indefinido en el último caso.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3