Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

585
Vistas
¿Por qué "A = A + B - (B = A)" intercambia valores en C?

Para cambiar a números enteros, A y B, esto parece funcionar en C,

 A = A + B - ( B = A);

¿Por qué funciona esto? Y si esto funciona en todas las condiciones, ¿se puede usar para acortar cualquier otro algoritmo comúnmente implementado?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En realidad, invoca un comportamiento indefinido de acuerdo con los estándares.

C99 §6.5: “2. Entre el punto de secuencia anterior y el siguiente, el valor almacenado de un objeto se modificará como máximo una vez mediante la evaluación de una expresión. Además, el valor anterior se leerá solo para determinar el valor que se almacenará.”

over 4 years ago · Santiago Trujillo Denunciar

0

No debe confiar en que un código como ese funcione porque se basa en el hecho de que se procesa de izquierda a derecha.

Cualquier implementación que no lo haga así va a hacer que falle.

Debe evitar escribir código que no funcione en todos los casos en todas las plataformas y que no sea independiente del compilador, o que se base en cosas que no estén documentadas o bien definidas.

Entonces, ¿por qué funciona si vas de izquierda a derecha? Supongamos que A = 1 y B = 3
A = A + B - ( B = A);
A = 1 + 3 - (1) = 3
La asignación de B ocurre donde dejé el (). La conclusión es que solo cuando se procesa de izquierda a derecha, la asignación de B a A ocurre más tarde.

Al procesar de derecha a izquierda el mismo ejemplo: A = A + B - ( B = A);
A = 1 + 1 - (1) = 1
Ahora la asignación de B está ocurriendo primero.

Nuevamente, no debe confiar en el código que no está claro para el lector sobre lo que está sucediendo y que depende del compilador, como es el caso aquí.

over 4 years ago · Santiago Trujillo Denunciar

0

Esto es solo "más corto" que la forma estándar/obvia de hacerlo, en la cantidad de líneas/puntos y comas utilizados.

  • Introduce operaciones adicionales que podrían impedir la optimización por parte del compilador.
  • Empeora la legibilidad (como lo menciona DR)
  • Utiliza (ab) un comportamiento no estándar (como lo menciona Marion), lo que podría hacer que falle con algunos compiladores

Nunca debes usarlo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda