"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo determinan las conversiones aritméticas habituales el tipo de resultado de los operadores binarios \"+\" con operandos con y sin signo?

¿Cómo determinan las conversiones aritméticas habituales el tipo de resultado de los operadores binarios \"+\" con operandos con y sin signo?

Publicado el 2024-12-22
Navegar:496

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

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:

  • doble largo, ambos operandos se convierten en doble largo.
  • doble, ambos operandos se convierten en doble.
  • flotante, ambos operandos se convierten a flotante.
  • unsigned long, el otro operando se convierte a unsigned long.
  • long int y el otro operando int sin signo, ambos operandos se convierten a int largo sin signo si el valor del int sin signo se puede representar en un int largo; de lo contrario, ambos se convierten a largo.
  • largo, el otro operando se convierte a largo.
  • sin signo, el otro operando se convierte a sin signo.

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.

Último tutorial Más>

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