[C con Clase] duda simple
Steven Davidson
srd4121 en njit.edu
Sab Sep 4 01:52:57 CEST 2010
Hola Mai,
On 9/3/2010 5:14 AM, maite mai wrote:
> hola,
>
> estoy leyendo los operadores de asignación
>
> ¿exáctamente qué hace <<=? a = a << b; no me queda claro qué hace
> esta asignación. Gracias.
>
Esto es correcto. El comportamiento de <<= es la operación << y luego
una asignación.
> Podrías decirme también ^=
>
Supongo que estás en el capítulo 4 de nuestro curso de C++. Por ahora,
no hemos visto estos operadores << y ^ porque son algo avanzados y no
los necesitamos por el momento. Veremos éstos y otros operadores a nivel
de bits en el capítulo 18 (
http://c.conclase.net/curso/index.php?cap=018#inicio ).
El operador << (desplazamineto a la izquierda) sirve para mudar una
secuencia de bits a la izquierda una cantidad de lugares. Por ejemplo,
unsigned short int num = 14;
num <<= 3;
Esta operación implica el siguiente comportamiento:
num = num << 3;
La operación del desplazamiento a la izquierda supone la siguiente
operación donde 14 en binario es 0000000000001110:
0000000000001110 << 3
Movemos toda la secuencia 3 lugares a la izquierda. Ahora obtenemos esto:
0000000001110000
que en decimal es 112. Por lo tanto, asignamos este valor a 'num'.
num <<= 3;
cout << num;
Aparecerá en pantalla:
112
Esto equivale a multiplicar 14 * 2^3 = 14 * 8 = 112. Típicamente, usamos
<< para multiplicar un entero no negativo por potencias de 2 y >> para
dividirlo por potencias de 2.
El operador ^ sirve para la operación XOR (OR exclusivo) a nivel de
bits. Es sencillo de operar viendo la tabla:
A | B | A ^ B
---+---+-------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Si ambos operandos son iguales, entonces el resultado es 0; si son
distintos, entonces el resultado es 1. Esta operación se aplica a cada
pareja de bits en una secuencia. Por ejemplo,
unsigned short int num1 = 14, num2 = 18;
num1 ^= num2;
Esto equivale a la siguiente operación:
0000000000001110
XOR 0000000000010010
--------------------
0000000000011100
El resultado, en decimal, es 28, por lo que 'num1' contiene el número 28.
Espero haber aclarado la duda.
Steven
Más información sobre la lista de distribución Cconclase