Вы находитесь на странице: 1из 7

Operadores de asignacin

C++ dispone de los siguientes operadores de asingacin:


Sintaxis:
Ejemplo: x = 3;
x += 3;
x &= 3;
Todos ellos son operadores binarios, de los cuales,b= es el nico
de asignacin simple, los dems son operadores de asignacin compuestos
Los seis primeros aceptan operandos de distinto tipo, mientras que los cinco
ltimos: =, &=, != y |=, implican manejo de bits por lo que sus operandos deben
ser tipos int en sus distintas variantes !o olvidar que las e"presiones de
asignacin producen un resultado #l tipo resultante es el de la $i%quierda&' el
valor que se aplica es el determinado por el "#alue #l valor resultante de
despu(s de la asignacin, es el resultado de la e"presin $el $#alue& )s* pues,
cualquiera que sea su sentido concreto, todos implican la +copia+ de un bloque
de memoria $que contiene el +resultado+& en algn sitio $la direccin indicada por
el ,value&
#jemplo: int num'loat - = ./0'
num = - 1 /'
#n este caso, el valor 0/0, resultado de , se aplica a num 2eniendo en cuenta
que el tipo resultante debe ser el de num $un int en este caso&, se reali%a
automticamente una conversin del %loat 0/0 a int $con p(rdida de precisin si
es necesario&, con el resultado de que num recibe el valor 0 y el resultado de la
asignacin es un int de valor 0 #sta propiedad de las asignaciones de producir
un resultado, es justamente la que permite e"presiones de asignacin
compuesta del tipo: ) = 3 = 4 = 5'
y es ampliamente utili%ada en la programacin de 411 4onsidere el bucle del
siguiente ejemplo: 67ile $ $c7 = getc7ar$& & 8= 9: & ' aprovec7ando que en este
caso, el resultado de la asignacin es un c&ar, se utili%a directamente en la
clusula del '&ile, resultando que el bucle se ejecuta inde-inidamente 7asta que
se pulse la tecla #;4 $escape&
#n general las sentencias de asignacin tienen la -orma: variable = e"presion
;i ( es un operador compuesto, la e"presin #/ <= #9 equivale a #/ = #/ <
#9 =or ejemplo: #/ 1= #9 equivale a #/ = #/ 1 #9
#jemplos
" >= y equivalentes >?" = " > y
" >= y 1 9?> equivalentes >?" = " > $y 1 9&
Leer ms: 7ttp:??666monogra-iascom?trabajos@.?operadoresAc?operadoresA
cs7tmlBoperadorebBi"%%.@,/C,@#D
E=#,)5E,#; 5# F!4,#G#!2E y 5#4,#G#!2E
Los )peradores de incremento y decremento son operadores unarios que agr
egan o sustraen uno de sus operandos, respectivamente ;on normalmente
implementados en lenguajes de programacin imperativos #n lenguajes
tipo 4 es normal tener 9 versiones $preA y postA& de cada operador con
semntica ligeramente di-erente
#n lenguajes tipo 4, el operador de incremento es escrito como 11 y el de
decremento como AA
#l operador de incremento aumenta el valor de su operando en / #l operando
debe ser un tipo de dato aritm(tico o puntero, y debe 7acer re-erencia a
un objeto modi-icable ;imilarmente, el operador de decremento disminuye el
valor de su operando en / #l valor de los punteros se incrementa $o disminuye&
por una cantidad que 7ace que apunte al siguiente $o anterior& elemento
adyacente en memoria
#n lenguajes que admiten ambas versiones de los operadores, los operadores
de preAincremento y preAdecremento aumentan $o disminuyen& sus operandos
en /, y el valor de la e"presin es el resultado del incremento $o decremento&
#n contraste, los operadores de postAincremento y postAdecremento incrementan
$o decrementan& el valor de sus operandos en /, pero el valor de la e"presin es
el valor original de su operando antes del incremento $o decremento& #n
lenguajes donde el incremento?decremento no es una e"presin $#j: Ho&, slo
se necesita una versin $en el caso de Ho, solo post operadores&
5ado que el operador de incremento?decremento modi-ica su operando, el uso
de ms de una ve% dentro de la misma e"presin puede producir resultados no
de-inidos =or ejemplo, en e"presiones tales como " I 11", no est claro en qu(
orden se deben reali%ar la resta y el operador de incremento ;ituaciones como
esta son aun peores cuando se aplican optimi%aciones por el compilador, lo que
podr*a dar lugar a un orden de ejecucin de operaciones di-erente de lo que
pretende el programador
#jemplosJeditarK
Los siguientes -ragmentos de cdigo 4 ilustran las di-erencias entre operadores
de pre y post incremento?decremento:
int "' int y' // Operadores de incremento " = /' y = 11"' // x es ahora 2, y es
tambin 2 y = "11' // x es ahora 3, y es 2 // Operadores de decremento " = .'
y = "AA' // x es ahora 2, y es 3 y = AA"' // x es ahora 1, y es tambin 1
#l operador de postAincremento es comnmente usado en los sub*ndices
de vectores =or ejemplo:
// Suma de elementos de un vector -loat sumarLelementos$-loat vecJK, int n& M
-loat sum = CC' int i = C' 67ile $i N n& sum 1= vecJi11K' // Post-
incremento de i, ue recorre // los n elementos del vector
return sum' O
)simismo, el operador de incremento es comnmente utili%ado con punteros:
// !opia un vector a otro usando punteros void copiarLvector$-loat >desde, -loat
>7asta, int n& M 67ile $nAA P C& // "ucle ue cuenta desde n hasta #
>7asta11 = >desde11' // !opia el elemento $%desde& a $%hasta&,
// luego incrementa ambos punteros O
*+,+- )perador Condicional
1 Sinopsis
#l operador condicional es el nico operador ternario de la gramtica 411
y sirve para tomar decisiones =roporciona un resultado entre dos
posibilidades en -uncin de una condicin
.ota: =uede a-irmarse que este operador 7a 7ec7o -ortuna, ya que
e"iste con la misma sinta"is e id(ntico comportamiento, en multitud de
otros lenguajes de programacin
2 Sintaxis
expresion-relacional ? expr1 : expr2
3 Comentario
#l operador condicional / : produce un resultado #n la e"presin E1 ?
E2 : E3, E1 es una e"presin relacional $ 0Q/9& que se evala primero
;i el resultado es cierto, entonces se evala E2 y este es el resultado #n
caso contrario $si E1 resulta %also&, entonces se evala E3 y este es el
resultado Ebserve que si la premisa E1 es cierta, entonces no llega a
evaluarse la e"presinE3
03+1 #l operador / : puede usarse para sustituir ciertas sentencias del
tipo i%2t&en2else, aunque puede conducir a e"presiones ms compactas
que las correspondientes i%+++else #n el ejemplo que sigue, a y se le
asigna el valor /CC:
x = 10;
y = x > 9 ? 100 : 200;
03+3 !o es necesario poner par(ntesis en la primera e"presin $E1&, ya
que la precedencia $ 0QCa& de / : es muy baja $justamente sobre la
asignacin = & 5e todos modos, es aconsejable ponerlos por legibilidad
y = (x > 9)? 100 : 200;
03+3 #n caso de que E1 no sea una e"presin relacional, debe ser un
escalar reducible a un booleano $4onversin de tipos .9/b& =or
ejemplo es vlido:
int y = 6 ? 7: 8;
aunque en este caso el resultado ser*a siempre y == 7 $el int R se se
traduce en el booleano true&
03+* #n ocasiones se aprovec7an los e-ectos laterales $ 0Q& del
operador para producir un resultado #jemplo:
x ? y : --!;
#l compilador H!S cpp permite la ausencia del segundo operando en este
tipo de e"presiones =or ejemplo, es vlido:
x ? : !; "" E1
#l resultado de esta e"presin es el valor de x si este es distinto de cero,
y 4 en caso contrario =or consiguiente, es equivalente a:
x ? x : !; "" E2
#l manual in-orma que este tipo de e"presiones solo son de utilidad en
caso de que la evaluacin de x tenga e-ectos laterales $por ejemplo, que
sea utili%ada como argumento en una -uncin&, en cuyo caso la e"presin
#9 tendr*a e-ecto lateral doble si x es distinto de cero La omisin del
segundo operador en #/ evitar*a esta computacin indeseada y dejar*a el
valor previamente computado sin que se produ%ca un doble e-ecto
0* #9 y #. deben seguir las reglas siguientes:
/ ;i #9 y #. son de tipos distintos, se reali%a una conversin de tipo
estndar, de -orma que el resultado ser siempre del mismo tipo,
con independencia de #/
9 ;i #9 y #. son de tipos unin o estructuras compatibles #l
resultado es una unin o estructura del tipo de #9 y #.
. ;i #9 y #. son de tipo #oid, el resultado es #oid
0 )mbos operandos son punteros a versiones cuali-icadas o no
cuali-icadas de tipos compatibles #l resultado es un puntero a
cualquiera de los tipos de ambos operandos
T Sn operando es un puntero y el otro es un puntero nulo #l resultado
es un puntero que puede seUalar a un tipo del primero o del
segundo operando
R Sn operando es un puntero a un objeto o tipo incompleto, y el otro
es un puntero a una versin cuali-icada o no cuali-icada de #oid #l
tipo resultante es el del puntero distinto de void
5 Ejemplos
05+1 ;uponiendo que ! e y sean Lvalues, las siguientes e"presiones son
equivalentes:
(x ? y : !) = 10;
(x ? y = 10 : (! = 10));
05+3 #l bucle que sigue imprime n elementos de una matri%, /C por l*nea,
con cada columna separada por un espacio y con cada l*nea terminada
por un !L $nueva l*nea&, incluida la ltima
#or (i = 0; i $ n; i)
print# (%&6'&c%( a)i*( (i&10==9 ++ i==n-1) ? ,-n, : ,
,);
05+3 #jemplo:
print# ( %.ienes &' ite/&s0-n%( n( n==1 ? %% : %s%);
05+* #jemplo:
1incl2'e $iostrea/03>
1incl2'e $ti/e03>
int /ain(4oi') 5 "" ============
ti/e6t t;
ti/e(7t);
str2ct t/8 pet/ = localti/e(7t);
lon9 '9t = 6ti/e!one"60;
co2t $$ %:i#erencia 3ora local con ;reen<ic3 = %
$$ a=s('9t) $$ % /in2tos % $$
('9t == 0 ? %-n% : ('9t $ 0 ? %a'elanto-n% :
%atraso-n%));
co2t $$ %>orario: % $$ (pet/->t/6is'st ? %?erano% :
%@n4ierno%) $$ en'l;
A
;alida:
Diferencia hora local con Greenwich = 60 minutos adelanto
Horario: Verano

Вам также может понравиться