Concepto básico

Disculpe alguien sabe que significa esta expresión: c+=1; ó i+=c; gracias si alguien me puede decir ke significan o que hacen.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Mi chavo, búscale bien :)

 

▼ Aquí está un video con una explicación del asunto:

Tutorial Java - 7 - Asignaciones Compuestas


Google es tu mejor amigo. Como dijo una vez José Manuel:

Mi chavo, búscale bien :)

Ja, ja.

~~~

Imagen de ezamudio

concepto viejo

Esto viene de C (y no sé si de antes, de hecho).

Estás haciendo suma y asignación en un solo paso.   es una manera más corta de decir  , pero la primera permite además al compilador optimizar a menos instrucciones en bytecode. Se puede hacer con casi todos los operadores:  ,  ,   e incluso con los de bits/boolean:  ,  ,   etc.

Es una abreviación de  c =

Es una abreviación de
 

Y de
 

@jpaul es probable que YoMismo no supiera el nombre del término que tenía que buscar y parte de su búsqueda es precisamente preguntar aquí.

Imagen de ezamudio

c+=1

Y de hecho los casos específicos de   y   tienen otra abreviación/optimización:   y  , y la variante   y  . Eso viene de C (o antes), y se traducía a una sola instrucción de ensamblador de incrementar un registro. La diferencia entre c++ y ++c es que c++ incrementa el registro pero devuelve el valor anterior, y ++c incrementa el registro y luego devuelve el valor (por lo que devuelve el valor ya incrementado). De modo que:

 

a vale 1, b vale 1 y c vale 3.

a += b, donde b es literal entero

 

Al parecer   es una especie de incremento en Java cuando   es un literal entero. A saber:

Java:

 

bytecode:

 

Obsérvese que:

  •   corresponde con  . Es decir, incrementar la variable   ( ) por  .
  •   corresponde con  . Es decir, incrementar la variable   ( ) por  .
    En realidad, es  , pero el compilador lo optimiza.

~~~

Imagen de Cid

Y algo más

Cuando utilizas tipos de datos diferentes en los dos operandos generalmente se hace un cast al tipo de dato al que le estas asignando el resultado de la operación

 

Para más info checate esto

Algol 68

 

De acuerdo con Dennis M. Ritchie (1), Ken Thompson se basó en la notación de Algol 68 para escribir los operadores de asignación compuestos (incluidos primeramente en el lenguaje B).

Por ejemplo, en Algo 68 existía el operador plusab (2). Así, x plusab y en Algol 68 se escribía como  , que en su forma expandida era  .

Y, siguiendo con Dennis M. Ritchie, fue Ken Thompson quien inventó los operadores de incremento   y decremento  , pero estos fueron incluidos en C.


Notas

  1. Dennis M. Ritchie. The Development of the C Language.
  2. Andrew D. McGettrick. Algol 68: A First and Second Course. p. 33-34. https://books.google.com.mx/books?id=4g44AAAAIAAJ&pg=PA33

~~~

Gracias

Gracias